2009-09-22 80 views
2

我想编写一个linq表达式,它将返回不包含特定值的ID。例如,我想回到那个没有价值= 30Linq group by +其中每组

ID, Value 
1, 10 
1, 20 
1, 30 
2, 10 
2, 20 
3, 10 
3, 20 

结果应该是2和3,因为这些非所有的不同的ID有30

的值这可能用单一的表达做什么?

感谢

回答

3

当然,这将做到这一点:

var query = from i in list 
      group i by i.GroupId into g 
      where g.Any(p => p.ItemId == 30) == false 
      select g.Key; 

foreach(var result in query) { Console.WriteLine(result); } 

此输出:

2 
3 

在这里,我已经使用,作为一个例子:

class Product { 
    public int GroupId { get; set; } 
    public int ItemId { get; set; } 
} 

var list = new List<Product>() { 
    new Product() {GroupId = 1, ItemId = 10}, 
    new Product() {GroupId = 1, ItemId = 20}, 
    new Product() {GroupId = 1, ItemId = 30}, 
    new Product() {GroupId = 2, ItemId = 10}, 
    new Product() {GroupId = 2, ItemId = 20}, 
    new Product() {GroupId = 3, ItemId = 10}, 
    new Product() {GroupId = 3, ItemId = 20}, 
}; 
+0

感谢。这很好。我从来没有使用任何运营商。 – JKJKJK 2009-09-22 16:09:45

+0

Aaahhh,不,除了==假! – 2009-09-22 18:49:28

+0

@ polarbear2k:你也可以说'g.All(p => p.ItemId!= 30)'。 – jason 2009-09-23 15:10:58

0

我没有LINQ的,但这里是SQL Server的SQL做你想做什么:

DECLARE @YourTable table (ID int, value int) 

insert into @YourTable VALUES (1, 10) 
insert into @YourTable VALUES (1, 20) 
insert into @YourTable VALUES (1, 30) 
insert into @YourTable VALUES (2, 10) 
insert into @YourTable VALUES (2, 20) 
insert into @YourTable VALUES (3, 10) 
insert into @YourTable VALUES (3, 20) 


SELECT DISTINCT ID 
    FROM @YourTable y1 
    WHERE NOT EXISTS (SELECT Value 
         FROM @YourTable y2 
         WHERE y1.ID=y2.id and y2.value=30) 

OUTPUT:

ID 
----------- 
2 
3 

(2 row(s) affected)