C# 如何在c中从列表中查找重复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

我想使用**linq从列表中筛选重复id,代码如下:**

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);