2011-11-08 43 views
0

我一直在尋找在CodePlex上的NerdDinner範例代碼,發現以下幾點:實體框架+ SqlQuery類<T> - 這是什麼代碼的目的(的NerdDinner)

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來檢索Dinners。爲什麼需要再次查詢調用FirstOrDefault()以添加到列表中?

+0

'結果'的類型是什麼? – Dave

回答

1

SqlQuery的文檔:

此查詢的結果不會被即使對象的返回類型是實體類型的上下文跟蹤。

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

所提供的代碼似乎然後是用於將所述一組未追蹤到由框架跟蹤對象的對象的替代方法。

+0

有道理謝謝。 – Dismissile

+0

我在這裏學到了smthg。我寧願調用db.Dinners.FirstOrDefault(d => d.DinnerID == result.DinnerID);雖然 –

相關問題