2009-09-22 74 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)