#c# #entity-framework
#c# #entity-framework
Вопрос:
Я просматривал код NerdDinner в codeplex и заметил следующее:
public IQueryable<Dinner> FindByLocation(float latitude, float longitude)
{
List<Dinner> resultList = new List<Dinner>();
var results = db.Database.SqlQuery<Dinner>("SELECT * FROM Dinners WHERE EventDate >= {0} AND dbo.DistanceBetween({1}, {2}, Latitude, Longitude) < 1000", DateTime.Now, latitude, longitude);
foreach (Dinner result in results)
{
resultList.Add(db.Dinners.Where(d => d.DinnerID == result.DinnerID).FirstOrDefault());
}
return resultList.AsQueryable<Dinner>();
}
Мне любопытно, в чем смысл этой строки:
resultList.Add(db.Dinners.Where(d => d.DinnerID == result.DinnerID).FirstOrDefault();
Код вызывает ExecuteQuery для извлечения обедов. Почему необходимо повторно запрашивать FirstOrDefault() для добавления в список?
Комментарии:
1. Каков тип «результатов»??
Ответ №1:
Из документации SqlQuery
:
Результаты этого запроса никогда не отслеживаются контекстом, даже если тип возвращаемого объекта является типом сущности.
http://msdn.microsoft.com/en-us/library/gg696545 (VS.103).aspx
Предоставленный код, похоже, является обходным путем для преобразования набора объектов, которые не отслеживаются, в объекты, которые отслеживаются платформой.
Комментарии:
1. Я кое-чему научился здесь. Я бы предпочел вызвать db. Обеды. FirstOrDefault(d => d.DinnerID == результат. DinnerID); хотя