2010-01-27 3 views
7

mam numer tablicy = {2,3,4,5,6}przypadku Query z tablicy w LINQ

Teraz trzeba wybrać wiersze z tabeli „dtlRecord”, gdzie liczba ta jest kolumną.

 
Number count 
2  10 
3  23 
4  20

Więc co jest mi potrzebne

select sum(count) from dtlRecord where number in (2,3,4,5,6) group by number 

muszę powyżej kwerendy w LINQ to SQL

+0

ten obejmie udział: http://stackoverflow.com/questions/857973 –

Odpowiedz

0

Jak około tuż za pomocą sprzężenia wewnętrznego:

int[] numbers = new[] { 2, 3, 4, 5, 6 }; 

from r in dtlRecord 
join number in numbers on r.Number equals number 
group r by r.Number into g 
     select new { 
      Number = g.Key, 
      Sum = g.Sum(r => r.Count) 
     }; 

lub

dtlRecord 
    .Join(numbers, r => r.Number, number => number, (r, number) => new {r, number}) 
    .GroupBy(arg => arg.r.Number, arg => arg.r) 
    .Select(g => new 
    { 
     Number = g.Key, 
     Sum = g.Sum(r => r.Count) 
    }); 
1
+0

mój numer kolumny typ danych i są Guid kiedy wykonać kwerendę w Linqpad, mówi Nie można sformatować węzła "Nowy" do wykonania jako SQL – jvm

+0

Jeśli kolumna jest guid, dlaczego twój przykład pokazuje liczby int? –

+0

Po prostu chciałem dać prosty przykład: – jvm

3

użytkowania Enumerable.Contains:

int[] numbers = new[] { 2, 3, 4, 5, 6 }; 
var query = from r in dtlRecords 
      where numbers.Contains(r.Number) 
      group r by r.Number into g 
      select new { 
       Number = g.Key, 
       Sum = g.Sum(r => r.Count) 
      }; 

foreach(var result in query) { 
    Console.WriteLine("Number = {0}, Sum = {1}", result.Number, result.Sum); 
} 
+0

+1 ponieważ moja odpowiedź wydawała się mylić OP. Może będzie miał więcej szczęścia z twoim przykładem. –

+0

Dzięki wszystkim. Zdecydowany. – jvm