1

我有 2 个有效的查询,我希望将它们结合起来以减少数据库调用。

                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;

我真的会在这里减少任何数据库调用吗?

4

2 回答 2

0

这似乎有点复杂,因为它Locations似乎是一个多值属性,Articles并且您只想加载正确的属性。根据this answer to a similar question,您需要使用选择一次单独返回它们,例如

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 语法,但如果我在那里做了一些愚蠢的事情,我深表歉意。)

于 2013-05-25T13:38:34.127 回答
0

你能不能用Include()这里的方法把每篇文章关联的位置都拉进来,然后同时选择文章和位置对象?或您需要的每个属性。

include 方法将确保您不需要进入数据库两次,但允许您访问相关实体的属性。

我相信您需要contains在 IEnumerable 上使用一种方法,如下所示:

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 };

(未经测试)

于 2013-05-26T12:34:08.507 回答