2010-01-27 36 views
7

Tôi có số mảng = {2,3,4,5,6}Nơi Truy vấn với Mảng trong LINQ

Bây giờ tôi phải chọn hàng từ bảng "dtlRecord" trong đó số này là một cột.

 
Number count 
2  10 
3  23 
4  20

Vì vậy, những gì tôi cần là

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

tôi cần trên truy vấn trong LINQ to SQL

+0

này sẽ bao gồm các phần IN: http://stackoverflow.com/questions/857973 –

Trả lời

0

Làm thế nào về chỉ sử dụng bên trong tham gia:

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

hoặc

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

LINQ tương đương ở đâu TRÊN
http://www.onedotnetway.com/linq-equivalent-of-where-in/

+0

cột số của tôi là Guid datatype và khi tôi thực hiện truy vấn trong Linqpad, nó nói Không thể định dạng nút 'Mới' để thực hiện như SQL – jvm

+0

Nếu cột của bạn là guid, tại sao ví dụ của bạn hiển thị số int? –

+0

chỉ muốn đưa ra ví dụ đơn giản – jvm

3

Sử dụng 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); 
} 
.210
+0

+1 vì câu trả lời của tôi dường như gây nhầm lẫn cho OP. Có lẽ anh ta sẽ may mắn hơn với ví dụ của bạn. –

+0

Cảm ơn tất cả. Đã giải quyết. – jvm

Các vấn đề liên quan