LINQ SQL: левое внешнее соединение по 2 параметрам - PullRequest
0 голосов
/ 18 марта 2011

Я пытаюсь выполнить соединение с пропуском по 2 параметрам, но безуспешно.

По сути, мне нужно

DECLARE @SomeValue
SET @SomeValue = 99

SELECT * FROM
[Table1] LEFT OUTER JOIN [Table2]
ON ([Table1].[Field1]=[Table2].[Field1] AND [Table2].[Field2]=@SomeValue)

Как я могу сделать это с помощью LINQ?

Ответы [ 6 ]

2 голосов
/ 18 марта 2011

Второй шаг ... Не уверен, что мне полностью нравится это решение - но один из подходов:

var someValue = 99;
var preQuery = from t2 in Table2
               where t2.Field2 == someValue
               select t2;

var query = from t1 in Table1
            join t2 in preQuery on t1.Field1 equals t2.Field1
            select new
            {
               T1 = t1,
               T2 = t2.FirstOrDefault()
            };
1 голос
/ 18 марта 2011

Это мой любимый синтаксис для левых внешних объединений:

from t1 in Table1
from t2 in Table2
    .Where(x => x.Field1 == t1.Field1 &&
                x.Field2 == someValue)
    .DefaultIfEmpty()
select new { t, t2 }
1 голос
/ 18 марта 2011
var someValue = 99;
var query = from t1 in Table1
            join t2 in Table2 
            on t1.Field1 equals t2.Field1 into tempTable
            from t3 in tempTable.Where(v => v.Field2 == someValue).DefaultIfEmpty()
            select new { t1, t3};
1 голос
/ 18 марта 2011

LINQ to SQL:

int someValue = 99; 
var query =
    from table1 from dc.Table1Items
    join table2 from dc.Table2Items
    on new { table1.Field1, Field2 = someValue } equals new { table2.Field1, table2.Field2 } into table2Items
    from table2 in table2Items.DefaultIfEmpty()
    select new
    {
       table1,
       table2,
    };
0 голосов
/ 10 сентября 2013
var query = from t1 in table1 join t2 in table2 equals t2.field2 = @somevalue into new table
        from t in table.DefaultIfEmpty() select new { t1, t2== null ? t1.field : t2.field };
0 голосов
/ 18 марта 2011

Предполагая, что вы хотите это в Linq:

var someValue = 99;
var qry = from t1 in Table1
          join t2 in Table2 on t1.Field1 equals t2.Field1 into tempTable
          from t3 in tempTable.FirstOrDefault()
          where (t3==null || t3.Field2 == someValue)
          select new
          {
              T1 = t1,
              T2 = t3
          };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...