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



我有以下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();

相关内容

  • 没有找到相关文章

最新更新