2011-09-16 31 views
0

使用LINQ to SQL,如何获得具有1,21行的行?我在寻找如何通过LINQ> SQL获得独特的价值?

SomeId==1 
and 
SecondId is a unique entry 

SomeId SecondId 
    0  20 
    1  21 
    1  22 
    1  22 

编辑:

好了,对不起。这并不明确。我试图做的是一般地找到那一行。有可能是另一个看起来像这样的条目:

1  25 

而这是唯一的25.所以我会回来两行。没有引用特定的Ids,我如何找到这两行?

+1

对不起,但您的编辑让我的问题不太清楚!所以你必须找到1,25,可能有一个或多个行有1,25?但是你不想特别**问1,25(通过引用他们的ID)?如果是这种情况,如果你交给这些行(你没有他们的ID),你甚至知道你有什么想要的东西? – Kevek

+0

我与Kevek--它真的不清楚查询的参数是什么。好吧,你已经在数据库中找到了这些行 - 但是你有什么关于你想要找到的信息? –

+0

@Kevek:只有一行有1,25(即“这是唯一的25”)。一般来说,我想SomeId == 1。这很简单明了。第二部分也得到SecondId只有一个值的条目。您可以在上面看到,只有两行符合该标准。 – 4thSpace

回答

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
  • 过滤,以便只有组无线th发为SecondId单个条目返回
  • 选择从该组中唯一进入

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

+0

谢谢,但请参阅编辑。 – 4thSpace

+0

@ 4thSpace:好的,从问题描述中*很不清楚,但我认为我编辑的答案现在可以做你想做的。 –

+0

你明白了!谢谢。 – 4thSpace

1

编辑:如果你说你想找到SomeId的任何组合& SecondId哪里有多于一行的组合?那么你可以做到以下几点:

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

这会给你一组结果,并且只返回那些有多行的结果。因此,在您的示例中,您将得到一个返回1,22组的组...

如果您正在查找的情况下只有表中有单个条目的行(与此组合相反)我可以将比较运算符从'>'更改为'==',而另一个答案也显示了这种可能性。

+0

可能我建议'source.SingleOrDefault(x => x.SomeId == 1 && x.SecondId == 21)'(更短和更严格) – sehe

+0

谢谢,但请参阅编辑。 – 4thSpace

+0

@sehe当然!我修改了我的答案以包含您的建议,当然值得信任。我今天学到了一些新东西:) – Kevek