2012-12-10 57 views
1

我想要实现的是多个表中的字符串列表。我目前有一个带有2个子表的ParentTable的简单数据库结构(假设Child1 & Child2)。 Child1 & Child2有一个名为Name的类型为nvarchar(50)的列。目前,我可以执行多个查询来实现字符串的一个列表:Linq从多个表中选择相同的数据类型

var myList = new List<string>(); 
myList.AddRange(Child1.Select(c1 => c1.Name)); 
myList.AddRange(Child2.Select(c2 => c2.Name)); 

OR

var myList = new List<string>(); 
myList.AddRange(ParentTable.SelectMany(x => x.Child1.Select (c1 => c1.Name))); 
myList.AddRange(ParentTable.SelectMany(x => x.Child2.Select (c2 => c2.Name))); 

我最终的问题是,它是否是可能的,即使巩固它分解成1个查询,这意味着使用父表?

回答

3

你只需要使用Concat操作:

var results = Child1.Select(c1 => c1.Name) 
       .Concat(Child2.Select(c2 => c2.Name)).ToList(); 
0

您可以使用Union运营商,同时也消除了重复你:

var q = Child1.Select(c1 => c1.Name).Union(Child2.Select(c2 => c.Name)).ToList(); 
+1

这是假设他*想*删除重复。他之前没有删除重复的内容,他希望功能上相同的代码只需往返数据库而不是两次。 – Servy

+0

@Servy,如果他想保留重复项,那么显然'Concat'和'Union All'是一样的,谢谢你的提及。 –