考虑这个示例数据:
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,但是在引入“group by”之后您将无法访问它?
再次感谢您提供的信息,我将标记为答案,但是如果有人可以解释对 min() (或 max 或其他)的所有调用的需要,我也会很感激它,看看我的真实数据,这仍然是我应该走的路吗?