C# 先从一个表检索,然后从另一个表检索的LINQ查询

C# 先从一个表检索,然后从另一个表检索的LINQ查询,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有两个包含相同字段的表, e、 g.id、姓名、发票号等 我想使用c语言从两个表中获取所有数据 下面是一个表的示例,如何添加第二个表 return query = from tb1 in dataContext.tbl1 select new customer { name= tbl1.name }; 如果有两个相同类型的序列

我有两个包含相同字段的表, e、 g.id、姓名、发票号等

我想使用c语言从两个表中获取所有数据

下面是一个表的示例,如何添加第二个表

 return query = from tb1 in dataContext.tbl1
                    select new customer
                    {
                       name= tbl1.name
                    };
如果有两个相同类型的序列,可以一次使用conc

return dataContext.tbl1.Select(tb1 => new customer()
{
    name = tb1.name,
})
.Concat(dataContext.tbl2
    .Select(tb2 => new customer()
    {
         name = tb2.name,
    }));
您可以对select调用使用查询语法,但我发现在这种情况下,方法语法更可取。

您可以使用Union或Concat:


这与康卡特类似。Union和Concat的主要区别在于Union从结果中删除了重复项。

为什么要添加ToList?这不在OP的代码里。这似乎是一个方法,它将在各种上下文中被调用,在这些上下文中,查询将被进一步添加到内存中,这将是一个主要问题。这只是一个示例-我可以立即尝试查询的这一部分按预期工作,稍后我可以删除它。但我同意没有必要这样做,因为它不仅是不需要的,而且是有害的,除非注意到并移除,否则可能会造成重大问题。如果您是第一次测试该方法,并且希望在列表中评估结果,那么您可以在测试时在调用方一侧添加一个ToList,而不是在需要删除它的方法中。@Ben如果您打算调用任何其他IQueryable方法,例如where、any ordering,或者应该在数据库上执行的任何其他操作,那么它就不会在数据库上发生,您将把对象拉入内存并使用linq to对象。如果不明智地使用它,这是有害的。例如,如果您像dataContext.tbl1.ToList一样查询数据库,它将从内存中的tbl1中检索所有记录,如果有很多记录,这就是问题所在。因此,最好根据您的业务需要设置一些where条件,这样结果集将根据条件减少,并在您实际需要检索数据的最后一个点点击ToList。嗨,Servy,我尝试了您的代码,您正在使用新的匿名类型,如何将值分配给我已经拥有的类,customer类?那么两个表中的数据都存储在一个类中?因为以后函数需要返回IEnumerable对象thanks@Ben您的操作方式与您在OP中的操作方式相同。我只是在编写时忘记添加它。我遇到此错误,无法使用集合初始值设定项初始化类型“Customers”,因为它未实现“System.Collections.IEnumerable”,“这和我的类对象有关吗?”本抱歉,加了一个括号。
query1 = from tb1 in dataContext.tbl1
                select new customer
                {
                   name= tbl1.name
                };

query2 = from tb2 in dataContext.tbl2
                    select new customer
                    {
                       name= tbl1.name
                    };

var resQuery = query1.Union(query2);