Entity Framework + SqlQuery <T>- Какова цель этого кода (NerdDinner) - PullRequest
0 голосов
/ 08 ноября 2011

Я смотрел на код 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 голос
/ 08 ноября 2011

Из документации SqlQuery:

Результаты этого запроса никогда не отслеживаются контекстом, даже если тип возвращаемого объекта является типом сущности.

http://msdn.microsoft.com/en-us/library/gg696545(VS.103).aspx

Предоставленный код, по-видимому, является обходным путем для преобразования набора объектов, которые не отслеживаются, в объекты, отслеживаемые платформой.

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