使用LINQ在C#中查找并计算另一个数组中的元素数量

3
我有以下情景:
我从数据源获取一组记录,并将它们添加到列表中。
List<Entity> e = new List<Entity>();
foreach (var elm in datasource)
{
      e.Add(new Entity { First = elm.First, Second = elm.Second, Third = elm.Third });
}

这给我带来了类似于以下内容:
// -> First = John, Second = Sally, Third = Ingrid
// -> First = Sally, Second = Ingrid, Third = James
// -> First = Ingrid, Second = Sally, Third = James

我有一个可能包含正数和负数值的数组,存储在一个列表中。

List<string> positives = { "John", "Sally" }
List<string> negatives = { "Ingrid", "James" }

我希望能够找到一种优雅的方法,根据以上情况匹配我的通用列表 e 中的正数和负数数量。使用 LINQ 是否可能实现这样的目标?
由于我不熟悉 LINQ,不知道该从哪里开始。我尝试了以下代码:
var pos = e.SelectMany(s => s in positives).Count()

但这会抛出一个异常。
任何帮助将不胜感激。
3个回答

3

在LINQ中,SQL的in语句对应的是Contains方法。

测试:

var pos = e.SelectMany(s => positives.Contains(s)).Count();

看起来我还没有理解你的问题。再次阅读。

说实话,你的问题措辞不太好。
但根据我所理解的,我认为正确的回答是:

var pos = e.SelectMany(i => positives.Contains(i.First) 
                            || positives.Contains(i.Second) 
                            || positives.Contains(i.Third)).Count();

1
您正在错误地使用in
e.SelectMany(s => positives.Contains(s)).Count();

但我认为你想要的是这个。
var pos = e.Count(s => positives.Contains(s.First) || positives.Contains(s.Second) ||positives.Contains(s.Third));

var neg= e.Count(s => negatives.Contains(s.First) || negatives.Contains(s.Second) ||negatives.Contains(s.Third));

0

或者你可以使用任何一个

var pos = e.SelectMany(i => 
    positives.Any(p=> p==i.First || p==i.Second || p==i.Third))
    .Count();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接