Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq从多个表中选择相同的数据类型_C#_.net_Linq - Fatal编程技术网

C# Linq从多个表中选择相同的数据类型

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

我试图实现的是来自多个表的字符串列表。我目前有一个简单的数据库结构,其中有一个ParentTable和两个子表(比如Child1和Child2)。 Child1和Child2都有一个名为Name的nvarchar(50)类型的列。目前,我可以执行多个查询以获得单个字符串列表:

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();