C# 使用Linq查找符合这些条件的所有行 var mEstList=new List(); var mDatesList=新列表(“2020-03-01”、“2020-03-02”、“2020-03-03”); 变量名称列表=新列表(“名称1”、“名称2”、“名称3”); 估算表示例: ID名称估计日期 姓名150 2020-03-01 2名称1 55 2020-03-02 3姓名1542020-03-03 4姓名2432020-03-03 5姓名3 43 2020-03-01 6姓名3 42 2020-03-02 7姓名3 44 2020-03-03
这是我在不使用linq的情况下试图做的事情,但我正试图找出如何使用单个linq命令来做同样的事情。我试图只返回与上面的主日期列表中的所有日期相匹配的估计值,因此在我的示例中,我将返回除第4行之外的所有行C# 使用Linq查找符合这些条件的所有行 var mEstList=new List(); var mDatesList=新列表(“2020-03-01”、“2020-03-02”、“2020-03-03”); 变量名称列表=新列表(“名称1”、“名称2”、“名称3”); 估算表示例: ID名称估计日期 姓名150 2020-03-01 2名称1 55 2020-03-02 3姓名1542020-03-03 4姓名2432020-03-03 5姓名3 43 2020-03-01 6姓名3 42 2020-03-02 7姓名3 44 2020-03-03,c#,linq,C#,Linq,这是我在不使用linq的情况下试图做的事情,但我正试图找出如何使用单个linq命令来做同样的事情。我试图只返回与上面的主日期列表中的所有日期相匹配的估计值,因此在我的示例中,我将返回除第4行之外的所有行 for(int h=0;hx.Name==Name&&x.Date>=2020-03-01); 如果(estList.Count>0) { var finalDate=estList.Max(x=>x.Date); var sDateList=mDatesList.Where(x=>x.Date
for(int h=0;hx.Name==Name&&x.Date>=2020-03-01);
如果(estList.Count>0)
{
var finalDate=estList.Max(x=>x.Date);
var sDateList=mDatesList.Where(x=>x.Date e.Name).Where(g=>mDatesList.Where(x=>x.Date n.Date)))。
全部(d=>g.Select(e=>e.Date).Contains(d)).SelectMany(g=>g.toListSync().ConfigureAwait(false);
我会做如下事情:
mEstList=context.Estimates.GroupBy(e=>e.Name).Where(g=>mDatesList.All(d=>g.values.Select(e=>e.Date).Contains(d)).SelectMany(g=>g.values.ToList();
我没有测试这个,所以可能会有一些错误。我希望能给你一个解决这个问题的想法
祝你好运。All方法返回布尔值,因此SelectMany使用此代码给出错误
var mEstList = new List<Estimate>();
var mDatesList = new List<DateTime>("2020-03-01", "2020-03-02", "2020-03-03");
var namesList = new List<string>("Name1", "Name2", "Name3");
Estimates Table Example:
ID Name Estimate Date
1 Name1 50 2020-03-01
2 Name1 55 2020-03-02
3 Name1 54 2020-03-03
4 Name2 43 2020-03-03
5 Name3 43 2020-03-01
6 Name3 42 2020-03-02
7 Name3 44 2020-03-03
for (int h = 0; h < namesList.Count; h++)
{
string name = namesList.ElementAt(h);
var estList = context.Estimates.Where(x => x.Name == name && x.Date >= 2020-03-01);
if (estList.Count > 0)
{
var finalDate = estList.Max(x => x.Date);
var sDateList = mDatesList.Where(x => x.Date <= finalDate);
if (estList.Count == sDateList.Count)
{
mEstList.AddRange(estList);
}
}
}
var mEstList = await context.Estimates.GroupBy(e => e.Name).Where(g => mDatesList.Where(x => x.Date <= DbFunctions.TruncateTime(g.Max(n => n.Date))).
All(d => g.Select(e => e.Date).Contains(d))).SelectMany(g => g).ToListAsync().ConfigureAwait(false);