我有以下linq查询:
Var q1 = (from t1 in context.Table1
where column = value
select t1).FirstOrDefault();
Var q2 = (from t2 in context.Table2
where column = value
select t2).FirstOrDefault();
据我所知,上面的linq
语句将调用database
两次以获取表数据,但我想以这样一种方式编写linq
查询,以便在单个数据库调用中获取两个表的数据。我怎样才能做到这一点呢?
您可以通过选择匿名类型来实现这一点:
Var q = (from t1 in context.Table1
where t1.column == value
select t1
)
.Select(t1 => new {
t1 = t1,
t2 = context.Table2
.FirstOrDefault(t2 => t2.column == value);
})
.FirstOrDefault();
var t1 = q.t1;
var t2 = q.t2;
这样,它将对所有这些进行一次查询。我对查询部分做了一些简化,得到了t2项,但是使用你写的没有障碍。
简短回答:这是不可能的
虽然两个查询都在同一个DB上,但它们在不同的表上工作,就像创建普通SQL语句一样,您将无法将这两个查询合并到一个
正确。
你可以使用实体框架。如果你不介意添加一个扩展,可以扩展到批量查询。
参见:github Link
可以使用EF的Include()
方法加载相关实体。
//加载所有博客、所有相关文章和所有相关评论
var blogs1 = context.Blogs
.Include(b => b.Posts.Select(p => p.Comments))
.ToList();