условное чтение linq-to-sql - PullRequest
       4

условное чтение linq-to-sql

0 голосов
/ 26 февраля 2012

Я пишу запрос, который выглядит следующим образом:

var TheOutput = (from x in MyDC.MyTable
                 where.....
                 select new MyModel()
                 {
                    MyPropID = (from a in MyDC.MyOtherTable
                                where....
                                select a.ElementID).SingleOrDefault(),

                    MyPropData = (from a in MyDC.MyOtherTable
                                  where a.ElementID == MyPropID
                                  select a.ElementData).SingleOrDefault(),
                 }

Я заполняю MyModel несколькими свойствами из базы данных.Два из этих свойств заполняются чтением другой таблицы.В данный момент я сначала читаю MyPropID, чтобы увидеть, есть ли элемент в другой таблице, а затем снова читаю другую таблицу, чтобы получить данные, независимо от того, был ли получен идентификатор.

Как я могуисключите повторное чтение, если я знаю, из чтения MyPropID и возврата значения NULL, что нет данных, соответствующих предложению where a.ElementID == MyPropID.

Спасибо.

1 Ответ

1 голос
/ 26 февраля 2012
var TheOutput = (from x in MyDC.MyTable
                 where.....
                 let id = (from a in MyDC.MyOtherTable
                                where....
                                select a.ElementID).SingleOrDefault()
                 select new MyModel()
                 {
                    MyPropID = id,
                    MyPropData = (from a in MyDC.MyOtherTable
                                  where id != null && a.ElementID == id
                                  select a.ElementData).SingleOrDefault()
                 }

Если ваш код создаст один SQL-оператор из этого запроса, я не думаю, что проверка на нуль имеет значение. Если этот запрос приведет к нескольким операторам SQL, он может.

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