LINQ, Должен я ПРИСОЕДИНЯТЬСЯ или использовать вложенный ИЗБРАННЫЙ NEW's

Я имею к ниже 2 операторов LINQ. Они оба возврат (по-видимому) тот же набор результатов. Кто-либо может объяснить мне, почему я должен использовать один путь по сравнению с другим? Это столь простой, как "Вы говорите, что картофель, я говорю картофель; Вы говорите, что помидор, я говорю помидор"?

Вот две разновидности LINQ->

1) Два lets ниже к закрытым методам, которые берут идентификатор и возвращают ИМЯ.

var business = from businesse in context.tblBusinesses
               where businesse.BusinessID == businessID
               join addresse in context.tblAddresses on businesse.BusinessID equals addresse.BusinessID
               let stateName = GetStateNameByID(addresse.StateID)
               let countyName = GetCountyNameByID(addresse.CountyID)
               select new
               {
                   businesse.BusinessName,
                   businesse.ContactName,
                   businesse.EmailAddress,
                   addresse.AddressLine1,
                   addresse.AddressLine2,
                   addresse.AddressLine3,
                   addresse.CityName,
                   State = stateName,
                   addresse.ZipCode,
                   addresse.ZipPlus,
                   County = countyName
               };

2)

var query = from businesse in context.tblBusinesses
            where businesse.BusinessID == businessID
            select new
            {
                businesse.BusinessName,
                businesse.ContactName,
                businesse.EmailAddress,
                Address = from addresse in businesse.tblAddresses 
                          select new 
                          {
                              addresse.AddressLine1,
                              addresse.AddressLine2,
                              addresse.AddressLine3,
                              addresse.CityName,
                              State = addresse.StateID,
                              addresse.ZipCode,
                              addresse.ZipPlus,
                              County = addresse.tblAdminCounty
                          }
            };

9
задан Jon Skeet 29 January 2010 в 21:48
поделиться

2 ответа

Вы уверены, что они дают один и тот же результат?

Похоже, что в первом примере Ваше Address свойство сгладится в несколько свойств, в то время как во втором примере Ваше Address свойство будет само по себе содержать свойства.

Но в противном случае, я бы сказал, что разница между объединением и "внутренним выбором" была бы вопросом личных предпочтений. Наверное, я бы предпочел пойти с join, потому что я привык писать SQL и наличие слова join делает ваше намерение очевидным. Но я также не вижу проблемы с использованием внутреннего выбора.

1
ответ дан 4 December 2019 в 23:06
поделиться

Когда вы смотрите профилировщик sql-сервера, вы видите, что второй создает много запросов, но первый получает все данные в одном запросе. Так что первый более эффективен.

6
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: