我正在查看codeplex上的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 :(得分:1)
来自SqlQuery
的文档:
即使返回的对象类型是实体类型,上下文也不会跟踪此查询的结果。
http://msdn.microsoft.com/en-us/library/gg696545(VS.103).aspx
提供的代码似乎是将未跟踪的对象集转换为框架跟踪的对象的解决方法。