我正在尝试按属性的长度排序Linq查询的结果,然后通过属性本身来排序字符串作为整数,但生成的SQL没有按照我预期的那样排序。Linq OrderBy字符串属性长度必须在选择列表
我加入多个表,过滤下来,以选择一个DTO出来:
query = basequery.Select(s => new HeadersDTO
{
headerid = s.Header.id,
orderno = s.Header.orderno,
customer = s.Header.customer,
dateoforder = s.Header.dateoforder,
consignee = s.Location.name,
city = s.Location.name,
state = s.Location.state
}).Distinct();
然后试图命令由s.Header.orderno
query = query.OrderByDescending(x => x.orderno.Length).ThenByDescending(x => x.orderno)
.Skip(() => offset).Take(() => criteria.per_page);
这仍然令它正常的方式串排序第一个字符优先。
但是,如果我选择x.orderno.Length
进入它自己的属性,然后通过它的顺序工作,例如,
query = basequery.Select(s => new HeadersDTO
{
ordernolength = s.Header.orderno.Length <---- added this
headerid = s.Header.id,
orderno = s.Header.orderno,
customer = s.Header.customer,
dateoforder = s.Header.dateoforder,
consignee = s.Location.name,
city = s.Location.name,
state = s.Location.state
}).Distinct();
query = query.OrderByDescending(x => x.ordernolength).ThenByDescending(x => x.orderno)
.Skip(() => offset).Take(() => criteria.per_page);
有没有办法做到这一点,我没有创建在选择列表中的新特性?如果需要,我可以添加更多信息。
'query.OrderByDescending(X => Int32.Parse(x.orderno))' –
是orderNo数字基于字符串? –
@SamAxe我以前见过,但它会抛出一个'Linq To Entities不能识别Int 32 Parse'错误。 –