如何根据 2 个属性筛选列表
本文关键字:属性 筛选 列表 何根 | 更新日期: 2023-09-27 17:58:25
我的代码中有一个列表,我需要根据两个条件过滤并返回特定的行。 有问题的列表是数据库中的模型列表。 每个模型上有两个 ID 属性,一个是数据表中的 ID 并且是唯一的,另一个是我们用来标识组并且可以重复的 ID。 我们称它们为 ID 和 GroupID。 基本上,我希望结果列表每个组 ID 只有一个,它应该是具有最高(数字上(ID 的列表。 例如:
输入:
List<MyModel> modelList = new List<MyModel>
modelList[0].ID = 1 modelList[0].GroupID = 5
modelList[1].ID = 2 modelList[1].GroupID = 5
modelList[2].ID = 3 modelList[2].GroupID = 6
modelList[3].ID = 4 modelList[3].GroupID = 6
期望输出:
Models at indexes 1 and 3.
使用 LINQ:
var items = (from model in modelList
group model by model.GroupID into modelGroup
select modelGroup.Max(i => i.ID)).ToList();
这里要做的是首先按 ID 对模型列表进行排序,然后按 GroupID 对列表项进行排序,然后拉取具有最大 Id 值的项目。
var result = modelList.OrderByDescending(x => x.ID).GroupBy(x => x.GroupID).Select(x => x.First());
上面的查询将为您提供结果。
这是您的解决方案:
var myData = models.GroupBy(model => model.GroupId)
.Select(group => group.OrderByDescending(model => model.Id).First());
或者你也可以这样做:
var myData = models.GroupBy(model => model.GroupId)
.Select(group => group.First(model => model.Id == group.Max(model1 => model1.Id)));
为了好玩,这里有一个小提琴。
您可以尝试使用 GroupBy。
var q = modelList.GroupBy(x => x.GroupID, x => x,
(key, g) => new {
GroupID = key,
Id = g.Max(c => c.ID)
});
这应该按GroupId
对所有元素进行分组,并在其中一个组中选择Max ID
。
试试这段代码:
List<MyModel> modelList = new List<MyModel>();
modelList.Add(new MyModel());
modelList.Add(new MyModel());
modelList.Add(new MyModel());
modelList.Add(new MyModel());
modelList[0].ID = 1; modelList[0].GroupID = 5;
modelList[1].ID = 2; modelList[1].GroupID = 5;
modelList[2].ID = 3; modelList[2].GroupID = 6;
modelList[3].ID = 4; modelList[3].GroupID = 6;
var list = from ml in modelList group ml by ml.ID into r select new { ID = r.Key, MaxGroupID = r.Max() };
这可能会对你有所帮助 modelList.GroupBy(model => model.GroupId, g => g.Id).Select(item => item.Max())
var newModelList = modelList.GroupBy(ml => ml.GroupID)
.Select(g => new MyModel
{
ID = g.OrderByDescending(x => x.ID).First().ID,
GroupID = g.Key
}).ToList();
详
1(然后GroupBy
Select
获得GroupID
上不同的项目。
2(First()
OrderByDescending
后获得最高ID
。
3(Select
new MyModel
只是为了明确投影。