C# 如何在linq to sql中按派生属性排序?
我有一个名为Total的属性,它是从数据对象上的其他值派生的。当我尝试在linq to sql中的order by语句中使用此属性时,我得到:成员“…”不支持转换为sql。这是有道理的,但这种情况下有解决办法吗?谢谢 您可以调用查询,然后调用C# 如何在linq to sql中按派生属性排序?,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我有一个名为Total的属性,它是从数据对象上的其他值派生的。当我尝试在linq to sql中的order by语句中使用此属性时,我得到:成员“…”不支持转换为sql。这是有道理的,但这种情况下有解决办法吗?谢谢 您可以调用查询,然后调用OrderBy()子句 var items = context.Tables.ToList().OrderBy(x=>x.Total); 您可以这样做,因为在调用.ToList()之后,您将使用linq访问对象 正如Break提到的,这可能不适用于所
OrderBy()
子句
var items = context.Tables.ToList().OrderBy(x=>x.Total);
您可以这样做,因为在调用.ToList()
之后,您将使用linq访问对象
正如Break提到的,这可能不适用于所有情况,另一种可能的解决方案是在.Select()
注意,我的语法可能有点错误,不要随身携带VS:)
现在有了这种类型的投影,你将不再得到一个
表
,而可能是一个选项。你所说的“派生”到底是什么意思-该属性是否是您模型的一部分?@Break:我相信他的意思是,它是一个使用其模型中的其他属性生成值的属性。它位于用于合计其他一些属性的分部类中。如果查询包括,例如Skip()
或Take()
,则这可能不是一个选项,否则,您必须从数据库中提取所有记录+因为我想不出更好的了。另外,AsEnumerable()
将是更轻量级的方法。
var items = context.Tables.Select(t=> new {t.Item1, Total=(t.Price + t.Tax)})
.OrderBy(t=>t.Total);