Linq 多个连接到 SelectList

Posted

技术标签:

【中文标题】Linq 多个连接到 SelectList【英文标题】:Linq Multiple Joins to SelectList 【发布时间】:2021-06-28 13:10:37 【问题描述】:

Below Linq 查询从 S 中返回我的值。

List<SelectListItem> sNos = _ctx.S.AsNoTracking()                    
                            .Select(n =>
                new SelectListItem
                
                    Value = n.SID.ToString(),
                    Text = n.SNO
                ).ToList();

return new SelectList(sNos, "Value", "Text");

我现在需要通过应用连接来进一步完善我的 linq 查询,例如我的实体“b”有一个要连接的 id,所以我尝试过类似的方法,但现在运气不错。有人可以从语法上向我展示如何在 linq 中正确应用联接吗?

List<SelectListItem> sNos = _ctx.S.AsNoTracking()  
                    join b in _ctx.B 
                    on b.BID = s.SID                  
                            .Select(n =>
                new SelectListItem
                
                    Value = n.SID.ToString(),
                    Text = n.SNO
                ).ToList();

return new SelectList(sNos, "Value", "Text");

这两个实体都已映射到我的 DBContext 页面中。

【问题讨论】:

我看到了方法链和查询理解语法的混合。选择一件事。还有很多关于如何通过 LINQ 连接两个表的答案。 @SvyatoslavDanyliv 你能详细说明一下我对 linq 查询很陌生。 @AndyWilliams 说有 2 种 LINQ 语法,method syntax 和 query syntax。请在更新问题时始终选择其中一项。 【参考方案1】:

如果你有很多连接,我更喜欢查询语法:

var query =
    from s in _ctx.S
    join b in _ctx.B on b.BID equals s.SID
    select new SelectListItem
    
        Value = s.SID.ToString(),
        Text = s.SNO,
        BValue = b.SomeField
    ;

var result = query.ToList();

关于连接子句的详细信息可以在here找到。

【讨论】:

以上是关于Linq 多个连接到 SelectList的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ to SQL 连接到 SQL Server?

实体框架 - Linq 中的数据库视图或连接到实体

多个(级联)左连接上的 Linq 查询 NullReferenceException

使用具有不同表前缀的相同 linq

LinQ 创建连接简单增删改查

通过 C# 连接到 Informix