当前位置:首页 > 数据库 > SQlite

c# – 如何使用DbLinq和SQLite进行左外连接?

我试过了

db.Table1.GroupJoin(db.Table2,
    t1 => t1.Id,
    t2 => t2.t1Id,
    (t1,g) => new { t1, g })
  .Where(item => !item.g.Any())
  .Select(item => item.t1);

但它返回0结果.我正在尝试编写生成以下SQL代码(或类似内容)的内容

SELECT t1.*
FROM Table1 as t1
LEFT OUTER JOIN Table2 as t2
ON t1.Id = t2.t1Id
WHERE IsNull(t2.Id);

解决方法:

看起来您想要的结果是识别Table1中与Table2在左外连接期间没有结果的项目.

用流利的表示法,方法与此类似:

var query = db.Table1.GroupJoin(db.Table2,
                t1 => t1.Id,
                t2 => t2.t1Id,
                (t1, joined) => new { t1, joined }
            )
            .SelectMany(r => r.joined.DefaultIfEmpty(), (r, j) => new  
            {
                r.t1, 
                j
            })
            .Where(r => r.j == null)
            .Select(r => r.t1);

在查询语法中:

var query = from t1 in db.Table1
            join t2 in db.Table2 on t1.Id equals t2.t1Id into joined
            from j in joined.DefaultIfEmpty()
            where j == null
            select t1;

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!