c#我需要执行这个SQL Select到LINQ

时间:2016-06-23 11:30:43

标签: c# sql-server linq

我有这个选择:

SELECT (MyFields)
    FROM table1 T1 
    INNER JOIN table2 t2 ON t2.ID_t2 = T1.ID_T1 
    INNER JOIN 
    table3 t3 on t3.ID_t3=T1.ID_T1 and Left(t3.Other_t3_field,5)=t2.Another_t2_field
WHERE (Conditions)

然后,我尝试了C#:

var query = from T1 in table1
    join t2 in table2 on T1.ID_T1 equals t2.ID_t2
    join t3 in **table3** on T1.ID_T1 equals v.ID_t3
    join t4 in **table3** on t2.Other_t2_field equals Microsoft.VisualBasic.Strings.Left(t2.Another_t3_field, 5)
    where (Conditions)
    select new 
    {
        (My fields)
    };

两者都有效,但是我的C#查询比SQL Select有更多的结果,我不知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

我通过更改C#中表3的连接来启动 - 使用匿名类型加入多个字段:

join t3 in table3 on new { Id = t1.ID_T1, X = t2.AnotherT2Field.Substring(0, 5) }
  equals new { Id = t3.ID_T3, X = t3.OtherT3Field.Substring(0, 5) }

(我希望你可以在这里使用Substring而不是Left ......它更像是惯用的C#。)

答案 1 :(得分:0)

您可以使用匿名类型添加多个连接条件:

var query = from T1 in table1
    join t2 in table2 on T1.ID_T1 equals t2.ID_t2
    join t3 in **table3** on new { 
                                   ID = T1.ID_T1, 
                                   substring = t2.Other_t2_field
                                 } equals new 
                                 {
                                   ID = v.ID_t3,
                                   substring = Microsoft.VisualBasic.Strings.Left(t2.Another_t3_field, 5)
                                 }
    where (Conditions)
    select new 
    {
        (My fields)
    };

正如Jon Skeet所说:你也可以使用Substring代替Left