将高级查询从SQL转换为LINQ

时间:2012-12-03 15:18:47

标签: c# asp.net sql linq

仍然习惯LINQ语法,并且遇到了我需要在LINQ中创建的查询 - 但不完全确定如何。

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

在LinqPad中播放,但界面并没有真正帮助(至少我能看到的)。

3 个答案:

答案 0 :(得分: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) };

修改: 要按用户过滤,请按以下步骤更新查询;

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()方法,但只是认为我会保持一致并继续使用查询语法。

答案 1 :(得分:0)

var jobs = from j in this.db.Jobs
           where !j.Applications.Any(x => x.UserId == currentUserId)
           select j;

答案 2 :(得分:0)

我建议您查看工具Linqer - 它将SQL转换为Linq代码。这不是免费的,但有10天的试用期。

enter image description here