c# - 如何仅选择在一列中具有唯一值的行?

标签 c# linq-to-sql distinct

考虑这个示例数据:

field1  field2  
1       100  
2       100  
3       101  
4       102  
5       102  
6       103   

我只想选择 field2 中的值仅出现一次的记录。上述所需返回数据的示例如下:

field1  field2  
3       101  
6       103   

如何使用 LINQ to SQL 来完成此操作?

--- 编辑 -------
大家好,感谢您的回复。我特意提供了简化的数据,以便找到问题的根源。我认为所有这些答案都会根据我的示例数据返回所需的结果,我将把它们标记为所有答案。

但是,在我的真实数据场景中,利用我从您的回复中学到的知识,我得到了这样的结果:

var RefinedSource =  from a in dSource
                     group a by a.AssetID into g
                     where g.Count() == 1
                     select new
                     {
                          AssetID = g.Key,
                          AssetType = g.Min(a => a.AssetType),
                          IPInfo = AppUtility.GetIPInfo(g.Key),
                          Hostname = AppUtility.GetServerName(g.Key),
                          DeviceID = g.Min(a => a.DeviceID).ToString(),
                          Environment = AppUtility.GetSolutionAndEnvironmentNames(g.Key),
                          Manufacturer = g.Min(a => a.Manufacturer),
                          MakeModel = g.Min(a => a.MakeModel),
                          Location = g.Min(a => a.Location),
                          count = g.Count()
                     };

所以我担心所有 .min() 调用...我推断这些是必要的,因为分组?有人可以解释为什么需要这些吗?在我的简单示例中,我不认为它们是问题,但对于我的真实数据,多次调用 min() 只是为了能够包含我需要的所有字段数据......这似乎并不存在很好。

分组允许我测试我需要的条件(用于识别重复值),但是我如何更直接地使用这样的条件,但直接访问我真正的底层数据行?

例如,查看我上面刚刚提供的示例,我希望能够仅使用原始“from a in dSource”部分中的 a.FieldName,但在引入“后无法访问它”通过...分组”?

再次感谢您提供的信息,我将标记为答案,但是如果有人可以解释对 min() (或 max 或其他)的所有调用的需要,我也将不胜感激,看看它的外观就像我的真实数据一样,这仍然是我应该走的路吗?

最佳答案

from r in tables
  group r.field2 by r.field1 into grp
  where grp.Count() == 1
  select new {grp.First(), grp.Key}

我会仔细检查这是否执行一个 SQL 调用。应该如此,如果是这样,我会将其保留在这里,因为 First 是一种非常常用的 Linq 方法,并且当在给定情况下有几十个同样好的东西可以使用时,人们应该倾向于熟悉的方法。如果它确实导致了多个 SQL 调用(再次,我会感到惊讶),那么尝试使用 Max()Min() 而不是 First() .

关于c# - 如何仅选择在一列中具有唯一值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125864/

相关文章:

javascript - Kentico 中的自定义表单控件自定义客户端验证

c# - 如何在 ASP.NET WebAPI 中返回文件 (FileContentResult)

c# - 发送命令后更新 UI

asp.net - 选择文本作为所有文本列的数据类型是否有缺点?

c# - 从具有 "priority"的列表中删除重复项

c# - 如何实现一个事件类

c# - linq插入: getting the row number

.net - 如何通过 WCF 使用 LinqToSql 维护子对象?

sql - 包含 SQL 列的结果的百分比

python - 获取最新对象 django