SQL Server含LEN()排序的查询转C# LINQ实现报错求助
解决LINQ中替代SQL LEN()函数的问题
嗨,我明白你遇到的问题了——SQL里的LEN()函数在C# LINQ里不能直接用len()来调用,因为C#没有这个全局方法,不过我们有完美对应的替代方案!
问题原因
你写的len(d.ColProduct)报错,是因为在LINQ查询中,要获取字符串长度得用字符串的**Length属性**,这个属性会被EF(或你使用的ORM框架)自动转换成SQL里的LEN()函数,完全匹配你原来的SQL逻辑。
正确的LINQ查询代码
查询表达式写法(和你原SQL风格最接近)
var product = from d in db.DetalleNotas orderby d.ColProduct.Length, d.ColProduct select new { product = d.ColProduct }; // 这里注意你原代码里的d.product应该是笔误,改成对应字段d.ColProduct啦
方法链写法(另一种常用的LINQ风格)
var product = db.DetalleNotas .OrderBy(d => d.ColProduct.Length) .ThenBy(d => d.ColProduct) .Select(d => new { product = d.ColProduct });
逻辑验证
用你给出的测试数据(PROCT1到PROCT10),这个查询会先按字符串长度排序:PROCT1-PROCT9都是6个字符,PROCT10是7个字符,所以前9个会排在前面;然后在长度相同的组里,再按ColProduct字符串本身排序,结果和你原来的SQL执行效果完全一致。
内容的提问来源于stack exchange,提问作者rodrigo.rodriguez
相关产品推荐
相关产品推荐

