0

次の SQL を LINQ 構文で記述する方法を知りたい

select U.Id, U.FirstName, U.Surname, 
(select COUNT(COESNo) from COESDetails where InspectorId = U.Id) as Count
from UserDetails U
where U.AppearOnReport = 1

Fluent または Query Expression のいずれか、あるいはその両方

ありがとう

4

3 に答える 3

1
from u in db.UserDetails
join c in db.COESDetails on u.Id equals c.InspectorId into uc
where u.AppearOnReport == 1
select new {
   u.Id,
   u.FirstName,
   u.Surname,
   Count = uc.Count()
}
于 2013-06-07T13:03:23.343 に答える
0

流暢な構文は

db.UserDetails.Where(ud => ud.AppearOnReport).Select(ud =>
    new {
        ud.Id,
        ud.FirstName,
        ud.Surname,
        Count = db.COESDetails.Count(c => c.InspectorId == ud.Id)
    });
于 2013-06-07T13:12:11.177 に答える
0

C#コンパイラを開かずにここに直接書いていますが、動作するはずです:

using(var context = new DataContext())
{
     var query = from detail in context.UserDetails
                 where detail.AppearOnReport = 1
                 select new
                 {
                        Id = detail.Id,
                        FirstName = detail.FirstName,
                        Surname = detail.Surname,
                        Count = context.COESDetails.Count(li => li.InspectorId = detail.Id)
                 };
}

このクエリの問題は、UserDetails テーブルからすべての列を取得することです (またはそう思う)。エンティティからマップされたすべての列ではなく、特定の列のみを取得するように何らかの方法で指定できることを覚えています。

とにかく、SQL プロファイラーを使用してクエリを確認できます。リンクでもっと遊びたい場合は、そのためのツールがあります: LINQPad

乾杯!

于 2013-06-07T13:12:37.137 に答える