我有两个有效的查询,我希望将它们组合起来以减少数据库调用。
var locations = from l in db.Locations
where l.LocationID.Equals(TagID)
select l;
我这样做是因为我需要l.Name,但有没有办法将上述结果放入下面的查询中?
articles = from a in db.Articles
where
(
from l in a.Locations
where l.LocationID.Equals(TagID)
select l
).Any()
select a;
我真的会在这里减少任何数据库调用吗?
答案 0 :(得分:0)
这似乎有点复杂,因为Locations
似乎是Articles
的多值属性,并且您只想加载正确的属性。根据{{3}}对类似的问题,你需要使用一个选择单独返回它们,例如。
var articles = from a in db.Articles
select new {
Article = a,
Location = a.Locations.Where(l => l.LocationId == TagId)
};
首次使用join
尝试失败:
var articlesAndLocations = from a in db.Articles
join l in a.Locations
on l.LocationID equals TagID
select new { Article = a, Location = l };
(我通常使用其他LINQ语法,但如果我在那里做了一些愚蠢的话,我会道歉。)
答案 1 :(得分:0)
你能否在这里使用Include()
方法拉入与每篇文章相关的位置,然后同时选择文章和位置对象?或者你需要的属性。
include方法将确保您不需要两次访问数据库,但允许您访问相关实体的属性。
你需要在IEnumerable上使用contains
方法我相信,这样的话:
var tagIdList = new List() { TagID };
var articles = from a in db.Articles.Include("Locations")
where tagIdList.Contains(from l in a.Locations select l.LocationID)
select new { a, a.Locations.Name };
(未测试的)