Linq 如何获取具有特定Id和LastDate的所有记录
这是我的桌子 我正在使用.NET3.1和EFcore 我有一个带有输入Linq 如何获取具有特定Id和LastDate的所有记录,linq,asp.net-core,entity-framework-core,Linq,Asp.net Core,Entity Framework Core,这是我的桌子 我正在使用.NET3.1和EFcore 我有一个带有输入int[]TermIds的控制器,其中包含一个或多个TermId 现在我想选择其TermId存在于TemrIds中且其statisticDate为最新日期的所有记录 请注意,每个TermId的最长日期与其他TermId不同 | Id | TermID |UniversityId|StatisticDate|FileTypeId|Count| | :----:| :-----:|:---------: |:--------
int[]TermIds
的控制器,其中包含一个或多个TermId
现在我想选择其TermId
存在于TemrIds
中且其statisticDate
为最新日期的所有记录
请注意,每个TermId的最长日期与其他TermId不同
| Id | TermID |UniversityId|StatisticDate|FileTypeId|Count|
| :----:| :-----:|:---------: |:------------|:--------:|:----|
| 1 |126 |5 |2012/01/10 |4 |150 |
| 2 |126 |5 |2012/01/10 |3 |250 |
| 3 |126 |4 |2012/01/10 |4 |127 |
| 4 |126 |4 |2012/01/10 |3 |110 |
| 5 |126 |5 |2011/01/10 |4 |107 |
| 6 |126 |5 |2011/01/10 |3 |99 |
| 7 |126 |4 |2011/01/10 |4 |103 |
| 8 |126 |4 |2011/01/10 |3 |96 |
| 9 |123 |5 |2011/01/01 |4 |88 |
| 10 |123 |5 |2011/01/01 |3 |76 |
| 11 |123 |4 |2011/01/01 |4 |98 |
| 12 |123 |4 |2011/01/01 |3 |99 |
| 13 |123 |5 |2010/01/01 |4 |77 |
| 14 |123 |5 |2010/01/01 |3 |66 |
| 15 |123 |4 |2010/01/01 |4 |33 |
| 16 |123 |4 |2010/01/01 |3 |55 |
最后我想要这张唱片
| Id | TermID |UniversityId|StatisticDate|FileTypeId|Count|
| :----:| :-----:|:---------: |:------------|:--------:|:----|
| 1 |126 |5 |2012/01/10 |4 |150 |
| 2 |126 |5 |2012/01/10 |3 |250 |
| 3 |126 |4 |2012/01/10 |4 |127 |
| 4 |126 |4 |2012/01/10 |3 |110 |
| 9 |123 |5 |2011/01/01 |4 |88 |
| 10 |123 |5 |2011/01/01 |3 |76 |
| 11 |123 |4 |2011/01/01 |4 |98 |
| 12 |123 |4 |2011/01/01 |3 |99 |
根据我的理解,这是一个linq查询。这应该只过滤出
TermID
上存在TermID
的记录,StatisticDate
是每个术语的最大日期
using System.Linq;
int[] termIds = new int[] { 126, 127 };
List<Foo> data = new List<Foo>()
{
new Foo() { Id = 1, TermID = 126, UniversityId = 5, StatisticDate = new DateTime(2012, 01, 10), FileTypeId = 4, Count = 150 },
new Foo() { Id = 2, TermID = 126, UniversityId = 5, StatisticDate = new DateTime(2012, 01, 10), FileTypeId = 3, Count = 250 },
new Foo() { Id = 3, TermID = 126, UniversityId = 4, StatisticDate = new DateTime(2012, 01, 10), FileTypeId = 4, Count = 127 },
new Foo() { Id = 4, TermID = 126, UniversityId = 4, StatisticDate = new DateTime(2012, 01, 10), FileTypeId = 3, Count = 110 },
new Foo() { Id = 5, TermID = 126, UniversityId = 5, StatisticDate = new DateTime(2011, 01, 10), FileTypeId = 4, Count = 107 },
};
var records = data.Where(r => termIds.Contains(r.TermID) && r.StatisticDate == data.Where(x => x.TermID == r.TermID).Max(x => x.StatisticDate));
使用System.Linq;
int[]termIds=newint[]{126127};
列表数据=新列表()
{
new Foo(){Id=1,TermID=126,UniversityId=5,StatisticDate=new DateTime(2012,01,10),FileTypeId=4,Count=150},
new Foo(){Id=2,TermID=126,UniversityId=5,StatisticDate=new DateTime(2012,01,10),FileTypeId=3,Count=250},
new Foo(){Id=3,TermID=126,UniversityId=4,StatisticDate=new DateTime(2012,01,10),FileTypeId=4,Count=127},
new Foo(){Id=4,TermID=126,UniversityId=4,StatisticDate=new DateTime(2012,01,10),FileTypeId=3,Count=110},
new Foo(){Id=5,TermID=126,UniversityId=5,StatisticDate=new DateTime(2011,01,10),FileTypeId=4,Count=107},
};
var记录=数据。其中(r=>termIds.Contains(r.TermID)&&r.StatisticDate==data.Where(x=>x.TermID==r.TermID).Max(x=>x.StatisticDate));
查看表格,对于TermId 126,最后日期是2012/01/10,但是对于TermId 123,最后日期是2011/01/01。现在我想要(例如)所有记录(TermId=123,statisticDate=2011/01/01),这是所有123TermId的最大日期。是的,jegtugado非常感谢。这正是我想要的