Я имею к ниже 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
}
};
Вы уверены, что они дают один и тот же результат?
Похоже, что в первом примере Ваше Address
свойство сгладится в несколько свойств, в то время как во втором примере Ваше Address
свойство будет само по себе содержать свойства.
Но в противном случае, я бы сказал, что разница между объединением и "внутренним выбором" была бы вопросом личных предпочтений. Наверное, я бы предпочел пойти с join, потому что я привык писать SQL и наличие слова join
делает ваше намерение очевидным. Но я также не вижу проблемы с использованием внутреннего выбора.
Когда вы смотрите профилировщик sql-сервера, вы видите, что второй создает много запросов, но первый получает все данные в одном запросе. Так что первый более эффективен.