2009-09-10 29 views
11

Làm cách nào tôi có thể viết một LINQ cho truy vấn đối tượng bao gồm mệnh đề có?Entity Framework T-Sql "có" Tương đương

Ví dụ:

SELECT State.Name, Count(*) FROM State 
INNER JOIN StateOwner ON State.StateID = StateOwner.StateID 
GROUP BY State.StateID 
HAVING Count(*) > 1 

Trả lời

22

Bất kỳ lý do để không chỉ cần sử dụng một điều khoản where vào kết quả?

var query = from state in states 
      join stateowner in stateowners 
       on state.stateid equals stateowner.stateid 
      group state.Name by state.stateid into grouped 
      where grouped.Count() > 1 
      select new { Name = grouped.Key, grouped.Count() }; 
+0

Dammit Jon .... haha ​​... bạn giành chiến thắng một lần nữa! <3 – womp

+5

grouped.Any() sẽ được sử dụng cho Count()> 0, không Count()> 1 – Lucas

+2

@Craig: Nếu nó đã là 'Count()> 0' thì sẽ không cần phải có một giới hạn tại tất cả, cho rằng đó là một tham gia bên trong ... –

3

Tôi tin rằng bạn có thể sử dụng một GroupBy theo sau là một khoản Where và nó sẽ dịch nó như là một Having. Không hoàn toàn chắc chắn mặc dù.

+2

Đối với MySql nó sẽ gây ra SELECT bên trong với WHERE bên ngoài, không có. Vì vậy, nó sẽ gây ra vấn đề hiệu suất. – Yuri