如何从linq中的多个日期列中获取最小值?

Man*_*jit 5 c# linq entity-framework

我在一个表中有 3 个日期类型列,我只想使用 linq 从所有列中获取一个最小日期。

表: 收集 分阶段处理
1/20/2017 2/19/2017 3/17/2016
4/21/2017 6/18/2014 12/15/2015

需要的结果:6/18/2014

目前我正在使用以下代码:

var collectedDate = queryResults.Min(d => d.Collected);
var stagedDate = queryResults.Min(d => d.Staged);
var ProcessedDate = queryResults.Min(d => d.Processed);
Run Code Online (Sandbox Code Playgroud)

然后比较这三者并将最小日期存储在另一个变量中。我怎样才能以其他一些好的方式做到这一点?

csh*_*pbd 2

您必须创建List使用collectedDate,stagedDate,ProcessedDate然后应用Linq它。请检查一下。

代码:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public class Test
    {
        public DateTime Collected {get; set;}
        public DateTime Staged {get; set;}
        public DateTime Processed {get; set;}
    }

    public static void Main()
    {
        List<Test> queryResults = new List<Test>();

        queryResults.Add(new Test(){Collected=Convert.ToDateTime("1/20/2017"),Staged=Convert.ToDateTime("2/19/2017"),Processed=Convert.ToDateTime("3/17/2016")});
        queryResults.Add(new Test(){Collected=Convert.ToDateTime("4/21/2017"),Staged=Convert.ToDateTime("6/18/2014"),Processed=Convert.ToDateTime("12/15/2015")});

        var collectedDate = queryResults.Min(d => d.Collected);
        var stagedDate = queryResults.Min(d => d.Staged);
        var ProcessedDate = queryResults.Min(d => d.Processed);

        List<DateTime> listDate = new List<DateTime>(){collectedDate,stagedDate,ProcessedDate};

        Console.WriteLine(listDate.Min(d => d));

        //2nd Solution
        //Compare DateTime between column and then rows to get min value
        Console.WriteLine(queryResults.Min(d => getMin(getMin(d.Collected, d.Staged), d.Processed)));
    }

    //Function to compare two DateTime
    public static DateTime getMin(DateTime a, DateTime b)
    {
        return a < b ? a : b;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在DotNetFiddle中检查代码的输出。