【问题标题】:Is it possible to add Multiple 'on' in 1 join statement of Linq是否可以在 Linq 的 1 个连接语句中添加多个“on”
【发布时间】:2014-08-06 03:53:22
【问题描述】:

我不知道在 LINQ 的一个连接语句中是否有可能有一个嵌套或 2 个或多个 on c.blah equals b.blah,因为我必须在不影响数据数量的情况下连接一个表

因为如果我将它添加到 where 会减少数据数量并且它充当过滤器

我目前尝试的是添加&& 子句,但它不起作用

var Pos =  (from a in db.Position
            join b in db.Position_Location
             on a.ID equals b.PositionId
            join c in db.Customer
            on a.CustomerID equals c.ID
            join d in db.Customer_Location
            on b.LocationId equals d.ID 
            join f in db.Worker
             on userIdNew equals f.userId
            join e in db.Worker_Customer_Apply_Shift <----Planning to add new validation here
                     on a.ID equals e.Client_Customer_PositionID into trial
                 from newtrial in trial.DefaultIfEmpty()
                 where 
                       b.LogicalDelete == false
                       && a.LogicalDelete == false
                       && c.LogicalDelete == false
                       && d.LogicalDelete == false

                 select new
                 {
                     a.ID,
                     Client_CustomerID = c.ID,
                     LogicalDelete =(newtrial == null ? true : newtrial.LogicalDelete),


                 }).Distinct().ToList();

在此先感谢 :)

【问题讨论】:

标签: c# mysql sql linq asp.net-mvc-3


【解决方案1】:

您可以将匿名类型与您想在连接条件中使用的字段一起使用:

on new { a.One, a.Two } equals new { b.One, b.Two }

如果两个表中的列名称不同,则需要为匿名类型的属性提供名称:

on new { Col1 = a.One, Col2 = a.Two } equals new { Col1 = b.Three, Col2 = b.Four }

【讨论】:

  • 先生,我可以使用on new {a.ID , b.ID } equals new {e.ID , e.LocationID}吗?
  • @EnriqueGil 怀疑。您至少必须像我的第二个示例中那样命名属性。试一试,看看会发生什么。
  • 先生,我非常感谢您的回答,它有效,它帮助我继续我的 2 天问题,支持并选择答案还不够
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多