C# 如何在c中从列表中查找重复ID
我想使用**linq从列表中筛选重复id,代码如下:**C# 如何在c中从列表中查找重复ID,c#,linq,list,foreach,C#,Linq,List,Foreach,我想使用**linq从列表中筛选重复id,代码如下:** foreach (var item in _VMReturnStock.scmDistReturnDetails.ToList()) { } 我在SCMDistreurnDetails中有ID,在这种情况下我应该怎么做?在重复id的基础上,我必须将模型状态设置为false。**您可以使用Jon Skeet Nuget的MoreLinq var list = _VMReturnStock.scmDistReturnDetails.Se
foreach (var item in _VMReturnStock.scmDistReturnDetails.ToList())
{
}
我在SCMDistreurnDetails中有ID,在这种情况下我应该怎么做?在重复id的基础上,我必须将模型状态设置为false。**您可以使用Jon Skeet Nuget的MoreLinq
var list = _VMReturnStock.scmDistReturnDetails.Select(x=> x.ID).Distinct();
它提供了不同的方法
foreach (var item in _VMReturnStock.scmDistReturnDetails.DistinctBy(d=>d.Id).ToList())
{
}
DistinctBy检查lambda的返回值是否唯一,但它返回原始对象。如果要使用现有LINQ运算符实现解决方案,一种解决方案是按ID分组,然后选择每个组的第一个元素。如果数据源是LINQ提供程序,那么繁重的工作很可能会在服务器端完成
foreach (var item in _VMReturnStock.scmDistReturnDetails.GroupBy(d=>d.Id).Select(grp=>grp.First()).ToList())
{
}
我假设您的id是int,ModelState的默认值是true,所以您可以这样做
int? uniqueID = _VMReturnStock.scmDistReturnDetails.FirstOrDefault();
foreach (var item in _VMReturnStock.scmDistReturnDetails.ToList())
{
if (item != tmp)
{
_VMReturnStock.ModelState = false;
uniqueID = null;
break;
}
}
如果您的ID不明确,那么模型状态将设置为false和uniqueID,您将返回r并将其存储在一些没有值的地方。您的问题一点也不清楚,将模型状态设置为false是一个谜,但根据您的一条评论,我认为您希望这样做
foreach (var item in scmDistReturnDetails.GroupBy(x=>x.id))
{
if (item.Count() > 0)
{
//add item.Key, the ID, into a variable where you can "set model state false"
}
}
试试这个:
List<int> list = new List<int>() { 1, 2, 5, 3, 1, 2, 3, 4, 5, 6 };
var info = list.GroupBy(i => i).ToDictionary(i => i.Key, i => i.Count());
foreach (var k in info.Where(k => k.Value > 1))
Console.WriteLine(k.Key);
我必须将该ID存储在一个变量中,如果ID计数>1,则必须将模型状态设置为false。我不需要不同的id,我以为最初的问题是过滤掉具有重复id的记录。。。?您将模型状态设置为false是什么意思?是的,过滤掉重复的id,如果列表中有任何重复的id,我必须将模型状态设置为false,以便用户无法保存datafilter id,如果任何id的计数大于1,请不要发布多个答案。将它与你的其他答案合并,然后删除它。这是两个不同的答案。虽然这会起作用,但如果您有大量没有重复记录的记录,则效率低下。您将从数据源中提取所有记录,即使它们没有任何重复项。请看我的答案,了解更好的方法。根据我的需要,这是这里最有用的答案,请给我一个清单,或列出减去重复项的所有内容。
List<int> list = new List<int>() { 1, 2, 5, 3, 1, 2, 3, 4, 5, 6 };
var dups = list.GroupBy(i => i).Where(i=>i.Count()>1).Select(i=>i.Key);
foreach (var k in dups)
Console.WriteLine(k.Key);