C# Linq从多个表中选择相同的数据类型
我试图实现的是来自多个表的字符串列表。我目前有一个简单的数据库结构,其中有一个ParentTable和两个子表(比如Child1和Child2)。 Child1和Child2都有一个名为Name的nvarchar(50)类型的列。目前,我可以执行多个查询以获得单个字符串列表:C# Linq从多个表中选择相同的数据类型,c#,.net,linq,C#,.net,Linq,我试图实现的是来自多个表的字符串列表。我目前有一个简单的数据库结构,其中有一个ParentTable和两个子表(比如Child1和Child2)。 Child1和Child2都有一个名为Name的nvarchar(50)类型的列。目前,我可以执行多个查询以获得单个字符串列表: var myList = new List<string>(); myList.AddRange(Child1.Select(c1 => c1.Name)); myList.AddRange(Child2
var myList = new List<string>();
myList.AddRange(Child1.Select(c1 => c1.Name));
myList.AddRange(Child2.Select(c2 => c2.Name));
var myList=new List();
AddRange(Child1.Select(c1=>c1.Name));
AddRange(Child2.Select(c2=>c2.Name));
或
var myList=new List();
AddRange(ParentTable.SelectMany(x=>x.Child1.Select(c1=>c1.Name));
AddRange(ParentTable.SelectMany(x=>x.Child2.Select(c2=>c2.Name));
我的最终问题是是否可以将其合并为一个查询,即使这意味着使用父表?您只需要使用
Concat
操作符:
var results = Child1.Select(c1 => c1.Name)
.Concat(Child2.Select(c2 => c2.Name)).ToList();
您可以使用
Union
运算符,它还可以为您删除重复项:
var q = Child1.Select(c1 => c1.Name).Union(Child2.Select(c2 => c.Name)).ToList();
这是假设他想删除重复的。他以前没有删除重复项,他想要的是功能等效的代码,只需执行一次到DB的往返,而不是两次。@Servy在他想要保留重复项的情况下,这是正确的,显然
Concat
与Union All
相同,谢谢您的提醒。
var q = Child1.Select(c1 => c1.Name).Union(Child2.Select(c2 => c.Name)).ToList();