2009-09-22 16 views
2

私は特定の値を含まないIDを返すlinq式を書いておきたいと思います。例えば、私は、これらの非は30Linq group by +各グループのどこに

との値がこれが可能である持っているので、結果は2と3でなければなりません= 30

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

値を持たないすべての個別のIDを返すようにしたいです単一の式で行うのですか?一例として、ここで

2 
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); } 

この出力:

おかげ

答えて

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

感謝。これは素晴らしいです。 Any演算子は一度も使用していません。 – JKJKJK

+0

Aaahhh、いいえ、何も '== false'! –

+0

@ polarbear2k: 'g.All(p => p.ItemId!= 30)'と言うこともできます。 – jason

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)