Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 如何在IEnumerable的子列表成员上使用(或可以使用)Linq Intersect方法?_C#_Linq_C# 3.0 - Fatal编程技术网

C# 如何在IEnumerable的子列表成员上使用(或可以使用)Linq Intersect方法?

C# 如何在IEnumerable的子列表成员上使用(或可以使用)Linq Intersect方法?,c#,linq,c#-3.0,C#,Linq,C# 3.0,我正在做以下事情 //first I have a list of sports... List<string> sports = new List<string> {"football","basketball"} //then I have a list of partners who are offering that sport List<Partner> = Partner.GetAvailablePartners(); //Partner is

我正在做以下事情

//first I have a list of sports...
List<string> sports = new List<string> {"football","basketball"}

//then I have a list of partners who are offering that sport
List<Partner> = Partner.GetAvailablePartners();

//Partner is a type that has a List<string> Sports members.
但我想它不起作用,因为我是在一个成员列表而不是根列表上工作的

这可以通过intersect(或其他linq)方法实现吗

Seth

。Where()
和所有其他lINQ方法返回一个带有延迟迭代的
IEnumerable
,而不是
List

您不能将它们强制转换为
列表

如果需要
列表
,请调用
ToList()

使用intersect

使用两个IEnumerable的示例

var ids = original.Select(x => x.ID).Intersect(yourEnumerable);

如果确实需要列表中的结果,请在LINQ语句末尾调用ToList()。否则,您应该能够执行以下操作:

IEnumerable<Partner> partners = partners.Where(p => p.Sports.Intersect(sports).Count() == sports.Count);
IEnumerable partners=partners.Where(p=>p.Sports.Intersect(Sports.Count()==Sports.Count);
…或在结果列表中:

List<Partner> partners = partners.Where(p => p.Sports.Intersect(sports).Count() == sports.Count).ToList();
List partners=partners.Where(p=>p.Sports.Intersect(Sports.Count()==Sports.Count.ToList();

为什么不呢?你会得到什么错误?这会编译并运行。但是在上面的一行中,我得到了InvalidCastException…“无法强制转换类型为”的对象,而ListIterator“1”就是这样做的。我将我的合作伙伴列表转换为IEnumerable,然后Intersect子句运行良好。我很惊讶这是需要的。因为Intersect扩展了IEnumerable,但是(显然)没有列出编译器为什么没有给出错误。为什么其他扩展方法在列表上工作得很好?@SethSpearman:所有扩展方法在
list
上都工作得很好。但是,它们中没有一个(除了
ToList()
)返回
List
。您没有得到编译器错误,因为您明确告诉编译器不要使用强制转换来给出错误。
List<Partner> partners = partners.Where(p => p.Sports.Intersect(sports).Count() == sports.Count).ToList();