2011-11-08 6 views
0

です:私は好奇心が強いEntity Frameworkの+のSQLQuery <T> - 私はCodePlexの上NerdDinnerコードを見て、次のように注目された。このコードの目的(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を呼び出しています。リストに追加するFirstOrDefault()を再度呼び出す必要があるのはなぜですか? SqlQueryのドキュメントから

+0

「結果」の種類は何ですか? – Dave

答えて

1

:このクエリの結果が返されるオブジェクトの型はエンティティタイプであっても、文脈によって追跡されることはありません

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

提供されるコードは、フレームワークによって追跡されるオブジェクトに追跡されていないオブジェクトのセットを変換する問題を回避することがその後思われます。

+0

感謝します。 – Dismissile

+0

ここでスムージングを学んだ。私はむしろdb.Dinners.FirstOrDefault(d => d.DinnerID == result.DinnerID)を呼び出します。しかし –

関連する問題