LINQ中的Concat / Union表
这个当前项目更像是一个更大项目的概念certificate。 我有两个“表”(表示为下面的列表), CatList
和DogList
,它们具有相同的列结构。 我希望能够使用两个Concat
或Union
,并使用LINQ
对结果集执行查询。 有人告诉我,通过实现interfaces
我将能够实现这些结果。
这是我到目前为止:
static void Main(string[] args) { System.Console.Write("Hello World\n"); Dog Dog1 = new Dog { name = "A", age = 1 }; Dog Dog2 = new Dog { name = "B", age = 2 }; Cat Cat1 = new Cat { name = "C", age = 3 }; Cat Cat2 = new Cat { name = "D", age = 4 }; List DogList = new List(); List CatList = new List(); DogList.Add(Dog1); DogList.Add(Dog2); CatList.Add(Cat1); CatList.Add(Cat2); var result = DogList .Concat(CatList); } } public interface iAnimal { string name { get; set; } int age { get; set; } } public class Dog :iAnimal { public string name { get; set; } public int age { get; set; } } public class Cat:iAnimal { public string name { get; set; } public int age { get; set; } }
我可以使用System.Console.Write(Dog1.name);
类的东西访问我创建的任何对象的任何数据成员System.Console.Write(Dog1.name);
,所以我认为我的接口实现是正确的。 我的LINQ语句需要更改什么才能有效地Concat / Union我的列表。
我对C#
和面向对象编程很新,所以请提供适合我知识水平的答案。
谢谢
编辑我道歉,因为我忘记包含我在当前代码中得到的错误消息。
Error 1 'System.Collections.Generic.List' does not contain a definition for 'Concat' and the best extension method overload 'System.Linq.ParallelEnumerable.Concat(System.Linq.ParallelQuery, System.Collections.Generic.IEnumerable)' has some invalid arguments Error 2 Instance argument: cannot convert from 'System.Collections.Generic.List' to 'System.Linq.ParallelQuery'
问题是编译器无法通过连接List
和List
它应该生成iAnimal
的集合。 默认情况下,它会看到List
并期望以下集合也是Dog
的集合。
您可以通过向Concat
提供generics参数,即明确告诉将所有内容视为iAnimal
var result = DogList.Concat(CatList);
然后,您将获得IEnumerable
类型的result
。
编辑:如果你坚持使用.NET 3.5,你需要类似的东西
var result = DogList.Cast().Concat(CatList.Cast ());
因为3.5不能自动将collection of something that inherits iAnimal
转换collection of something that inherits iAnimal
的collection of iAnimal
。
通用列表来自不同类型(Dog和Cat),您必须在连接之前将它们“转换”到目标接口:
var list1 = DogList.Cast(); var list2 = CatList.Cast (); var bothLists = list1.Concat(list2); //optional .ToList()