在实体框架6中使用一个linq查询选择多个对象

时间:2015-05-25 05:38:29

标签: c# linq entity-framework

我有以下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查询两个表中的数据都在一个数据库中调用。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:4)

您可以通过选择匿名类型来实现此目的:

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项,但是没有障碍可以使用你写的那个。

答案 1 :(得分:0)

简答:这是不可能的

虽然两个查询都在同一个数据库中,但它们正在处理不同的表, 在创建普通SQL语句时考虑它,您将无法仅在一个

中组合这些两个查询

答案 2 :(得分:0)

正确。

但是,您可以使用Entity Framework.Extended进行批量查询,但如果您不介意添加扩展名。

请参阅:github Link

答案 3 :(得分:-1)

可以使用EF的Include()方法加载相关实体。

//加载所有博客,所有相关帖子以及所有相关评论

var blogs1 = context.Blogs 
                   .Include(b => b.Posts.Select(p => p.Comments)) 
                   .ToList();