C# 有没有一种方法可以同时使用LINQ对两个属性进行排序
我有以下课程:C# 有没有一种方法可以同时使用LINQ对两个属性进行排序,c#,.net,entity-framework,linq,sql-order-by,C#,.net,Entity Framework,Linq,Sql Order By,我有以下课程: public class MyClass { public DateTime? Date1 { get; set; } public DateTime? Date2 { get; set; } } 此类中的对象始终有一个日期为null,另一个日期为值,例如: var obj1 = new MyClass { Date1 = new DateTime(2020/12/12), Date2 = null }; v
public class MyClass
{
public DateTime? Date1 { get; set; }
public DateTime? Date2 { get; set; }
}
此类中的对象始终有一个日期为null,另一个日期为值,例如:
var obj1 = new MyClass
{
Date1 = new DateTime(2020/12/12),
Date2 = null
};
var obj2 = new MyClass
{
Date1 = null,
Date2 = new DateTime(2020/12/8)
};
var obj3 = new MyClass
{
Date1 = new DateTime(2020/12/24)
Date2 = null
};
是否有一种方法可以通过这两个属性从数据库上下文获取有序数据?(可能是在执行查询时合并了两列,但我不希望输出包含合并的列)
在这种情况下,查询应给出以下结果:
[obj2、obj1、obj3]如果需要使用Linq to实体解决上述问题:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var obj1 = new MyClass
{
Date1 = new DateTime(2020,12,12),
Date2 = null
};
var obj2 = new MyClass
{
Date1 = null,
Date2 = new DateTime(2020,12,8)
};
var obj3 = new MyClass
{
Date1 = new DateTime(2020,12,2),
Date2 = null
};
List<MyClass> lm = new List<MyClass>();
lm.Add(obj1);
lm.Add(obj2);
lm.Add(obj3);
var ls = lm.OrderBy(l => l.Date1 ?? l.Date2).ToList();
ls.ForEach(s => Console.WriteLine(s.Date1 ?? s.Date2));
}
}
public class MyClass
{
public DateTime? Date1 { get; set; }
public DateTime? Date2 { get; set; }
}
然后在此列上应用
.OrderBy
。您不能执行.OrderBy(x=>x.Date2×x.Date1)
?我觉得英孚应该能够翻译。从我所读到的,EF可以处理null coalesce操作符。假设null合并操作符在EF中不起作用-但是这些都很旧了。如果??
不起作用,.OrderBy(x=>x.Date1.HasValue?x.Date1.Value:x.Date2.Value)
大概应该起作用。OrderBy(x=>x.Date1?x.Date2)
不起作用?它在我的linq to对象测试中起作用
[NotMapped]
public int Date3 { get { return this.Date1??this.Date2; } }