当使用LINQ OrderBy
按类类型的属性排序时,我希望集合按类类型的属性之一的值排序。如何控制这一点,同时能够通过EF Core转换为SQL查询?
public class FooDate
{
public DateTime DateTime {get; set;}
public bool UserSetValue {get; set;}
// other properties
}
public class Bar
{
public FooDate Date {get; set;}
// other properties
}
字符串
当我按类类型的属性排序时:
List<Bar> sortedInstances = existingList.OrderBy(x => x.Date).ToList();
型
我希望集合按FooDate.DateTime
的值排序。
更新:
我尝试实现IComparable
,但它没有在EF Core中转换为SQL。
public int CompareTo(object obj)
{
if (obj == null) return 1;
FooDate other = obj as FooDate;
if (other != null)
return this.DateTime.CompareTo(other.DateTime);
else
throw new ArgumentException("Object is not a FooDate");
}
型
1条答案
按热度按时间fdx2calv1#
首先,创建一个接口,指示类型有一个表达式,可以使用该表达式进行比较:
字符串
并在你的类上实现它:
型
然后创建您自己的
OrderBy
版本,将键限制为拥有自己的比较器:型
当您使用它时,您可能还需要每个版本的
ThenBy
和Descending
:型
这依赖于以下方法来组合两个表达式:
型
现在你有了(大部分)原始代码的工具:
型
在幕后,它将构建一些等价于:
型