преобразование t-sql запроса в Linq в Sql с объединением и множественным объединением - PullRequest
1 голос
/ 09 января 2011

У нас есть две связанные таблицы (опись, инвентаризация), и запрос t-sql работает с ними следующим образом.

select inv.[code],
       coalesce(inL.name, inL2.name) as [name],
       coalesce(inL.description, inL2.description) as [description]
from dbo.[inventory] inv
left join dbo.[inventoryLocalization] inL on inv.code  = inL.code and inL.language = 'de'
left join dbo.[inventoryLocalization] inL2 on inv.code  = inL2.code and inL2.language = 'en'
where inv.[code] like '15.' + '%'
order by inv.[code];

для повышения производительности, мы попытаемся использовать эти таблицы из кеша, а не из RDBMS напрямую. для проекта asp.net 4.0, c #. Мы взяли обе таблицы для согласования с набором данных, и мы можем связаться с ними через этот набор данных.

DataSet ds = UtilityCache.getCachedDataSet();

"ds.Tables [0]" - инвентарь Таблица и "ds.Tables [1]" - инвентаризация Таблица

Но как мы можем преобразовать приведенный выше синтаксис T-Sql в linq2Sql. Можно ли использовать объединение для оператора select и объединить две таблицы с несколькими условиями?

Заранее спасибо ..

1 Ответ

2 голосов
/ 09 января 2011

Объединение может быть сделано просто с помощью оператора объединения c # ??, т.е.

select x.Name ?? y.Name;

Объединения являются одним условием в LINQ, но в большинстве случаев (по крайней мере, для внутренних объединений) вы можете добавитьдополнительное «где» для того же результата.К сожалению, это сложнее для внешних объединений: (* ​​1005 *

Также имейте в виду, что когда перевод становится неоптимальным или просто запутанным, вы можете использовать:

var data = ctx.ExecuteQuery<ResultType>(tsql, args).ToList();

, используя {0} и т. Д. Для представления параметров(например, string.Format спецификаторы), и где ResultType может быть любого типа с именами свойств, которые соответствуют возвращаемым именам столбцов (для этой цели я часто использую специфический для запроса локальный тип).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...