【问题标题】:Is there a way to orderBy two properties simultaneously using LINQ有没有办法同时使用 LINQ 对两个属性进行排序
【发布时间】:2021-01-05 15:22:44
【问题描述】:

我有以下课程:

public class MyClass
{
        public DateTime? Date1 { get; set; }

        public DateTime? Date2 { get; set; }
}

此类中的对象总是有一个日期为空,另一个有一个值,例如:

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]

【问题讨论】:

标签: c# .net entity-framework linq sql-order-by


【解决方案1】:

如果上述问题只需要使用 Linq to Entities 解决:

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; }
}

2020 年 12 月 2 日上午 12:00:00
2020 年 12 月 8 日上午 12:00:00
2020 年 12 月 12 日上午 12:00:00

如果您需要在使用 Linq to SQL 的数据库上执行此操作,则可以在 Table 类中使用 NOTMAPPED 属性。

[NotMapped]
public int Date3 { get { return this.Date1??this.Date2; }  }

然后在此列应用.OrderBy。

【讨论】:

  • OrderBy(x =&gt; x.Date1 ?? x.Date2) 不会工作?
  • 它在我的 linq to objects 测试中工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
相关资源
最近更新 更多