微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ加入条款

我正在努力使用一个连接/ where子句,什么是一个相当简单的sql select语句.

我正在尝试从tb1中获取产品信息列表,其中位于tbl2之后的位置,但是必须通过三个不同的列连接.

所以sql会看起来像这样:

SELECT     tb1.*
FROM         tb2 INNER JOIN
                      tb1 ON tb2.Col1 = tb1. Col1 AND tb2.Col2 = tb1. Col2 AND 
                      tb2.Col3 = tb1.Col3
WHERE     (tb2.Col1 = col1) AND (tb2.Col2 = col2) AND (tb2.Col4 = string)

ColX是将要传递的字符串作为参数的主要的where子句;所有其他列都在上下文中.

如何使用where子句实现多个连接?

并向正确的方向推进,非常感谢.

解决方法

要在LINQ中加入多个字段,您必须创建一个新的匿名类型,其中包含要比较的列,然后在连接中使用该匿名类型:
var results = from t1 in context.tb1
              join t2 in context.tb2
              on new { t1.Col1,t1.Col2,t1.Col3 } equals
                  new { t2.Col1,t2.Col2,t2.Col3 }
              where t2.Col1 == col1 && t2.Col2 == col2 && t2.Col4 == someString
              select t1;

这里是等效的Lambda语法:

var results = context.tb1.Join(
                  context.tb2,t1 => new { t1.Col1,t1.Col3 },t2 => new { t2.Col1,t2.Col3 },(t1,t2) => new { t1,t2 })
              .Where(o => o.t2.Col1 == col1 
                  && o.t2.Col2 == col2
                  && o.t2.Col4 == someString)
              .Select(o => o.t1);

正如你所看到的,在连接的情况下,查询语法通常会产生一个更容易阅读的语句.

原文地址:https://www.jb51.cc/mssql/83159.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐