如何使用LINQ> SQL获得独特的价值?

时间:2011-09-16 22:09:42

标签: c# .net linq-to-sql

使用LINQ to SQL,如何获得1,21行?我正在寻找

SomeId==1 
and 
SecondId is a unique entry

SomeId   SecondId
   0        20
   1        21
   1        22
   1        22

编辑:

好的,抱歉。那不清楚。我想要做的是通常找到那一行。可能还有另一个条目如下:

1      25

那是唯一的25个。所以我会回来两行。如果没有引用特定的ID,我如何找到这两行?

2 个答案:

答案 0 :(得分:3)

编辑:好的,真的不清楚你之前的意思,但现在我想我明白了你的意思,你想要的是:

var query = from row in table
            where row.SomeId == targetId
            group row by row.SecondId into g
            where g.Count() == 1
            select g.Single();

换句话说:

  • 首先按SomeId过滤
  • 分组SecondId
  • 过滤,以便只返回包含SecondId个{{1}}条目的组
  • 从该组中选择唯一条目

当然可以有多个这样的组 - 所以你在你的例子中获得(1,21)和(1,25)。

答案 1 :(得分:1)

编辑:如果您说想要找到SomeId&amp ;;的任意组合。 SecondId哪个组合有多行?然后你可以做到以下几点:

var results = source.Where(x => x.SomeId == 1).GroupBy(x => x.SecondId).Where(g => g.Count > 1);

这将为您提供结果组,并仅返回具有多行的结果。因此,在您的示例中,您将获得一个返回1,22 ...

的组

如果您正在查找的情况是您只有表中有一个条目的行与该组合(与我正在返回的相反),您可以从'>'更改比较运算符到'==',另一个答案也表明了这种可能性。