Предложения WHERE в JOIN с использованием LINQ с лямбдами

У меня такая ситуация:

У меня есть форма в ASP.NET, и мне нужно извлечь данные из базы данных mssql. Запрос LINQ строится из значений, которые вставляются в форму.

if (ddlRegion.SelectedIndex > 0)
{
  query = query.Where(re => re.Region == ddlRegion.SelectedValue);
}
if (tbName.Text.Trim().Length > 0)
{
  query = query.Where(na => na.Name.Contains(tbName.Text));
}
var result = query.Select(res => new
                {
                    res.ColumnA,
                    res.ColumnB,
                    res.ColumnC
                });

Проблема в том, что мне нужно сделать соединение с TableB

query = query.Join(TableB, tA => tA.Code, tB => tB.CodFiscal, (tA, tB) => tA);

Исходная команда SQL выглядит следующим образом:

select tA.ColumnA, tA.ColumnB, tA.ColumnC from TableA tA join TableB tB on tA.Code=tB.Code where tB.ExpireDate>=getdate() and tB.datavalabil >=getdate() 

Проблема в том, где соединяются предложения из таблицы tB.

1 ответ

Решение

Вы можете сделать что-то вроде этого:

query = query.Join(TableB, tA => tA.Code, tB => tB.CodFiscal, (tA, tB) => new { tA, tB })
             .Where(x => x.tB.ExpireDate >= DateTime.Now and x.tB.datavalabil >= DateTime.Now)
             .Select(x => x.tA);

Или в синтаксисе запроса:

query = 
    from tA in query
    join tB in TableB on tA.Code equals tB.CodFiscal
    where tB.ExpireDate >= DateTime.Now and tB.datavalabil >= DateTime.Now
    select tA;
Другие вопросы по тегам