0

まだ LINQ 構文に慣れており、LINQ で作成する必要があるこのクエリに出くわしましたが、その方法が正確にはわかりません。

SELECT *,
   (SELECT 1 FROM Applications 
   WHERE Applications.jID = Jobs.ID 
   AND Applications.uID = @uID) AS Applied 
FROM [Jobs]

LinqPad で遊んでいますが、インターフェイスはあまり役に立ちません (少なくとも私が見る限り)。

4

3 に答える 3

2

Paul Sasik によって提供されたリンクと、あなたが を求めているという彼のアドバイスに基づいてLEFT OUTER JOIN、このクエリはあなたの要件を満たすはずです。

var query = from job in jobs
            join app in applications on job.ID equals app.jID into grouped
            from subApp in grouped.DefaultIfEmpty()
            select new { Job = job, Applied = (subApp != null) };

EDIT : ユーザーでフィルタリングするには、クエリを次のように更新します。

var query = from job in jobs
    join app in
    (
        from userApp in applications where userApp.uID == uID select userApp
    ) on job.ID equals app.jID into grouped
    from subApp in grouped.DefaultIfEmpty()
    select new { Job = job, Applied = (subApp != null) };

個人的には、この時点で .Where() メソッドを直接使用することに戻りましたが、すべての一貫性を保ち、クエリ構文を引き続き使用すると考えていました。

于 2012-12-03T15:50:34.003 に答える
0

SQL を Linq コードに変換するツールLinqerをチェックすることをお勧めします。無料ではありませんが、10 日間の試用版があります。

ここに画像の説明を入力

于 2012-12-03T19:12:08.850 に答える
0
var jobs = from j in this.db.Jobs
           where !j.Applications.Any(x => x.UserId == currentUserId)
           select j;
于 2012-12-03T15:32:35.917 に答える