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

但这会引发异常。

任何帮助将不胜感激

4

3 回答 3

3

LINQ 中的 SQLin子句是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();
于 2013-11-15T09:55:57.750 回答
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));
于 2013-11-15T09:57:27.790 回答
0

或者你可以使用任何

var pos = e.SelectMany(i => 
    positives.Any(p=> p==i.First || p==i.Second || p==i.Third))
    .Count();
于 2013-11-15T10:06:54.190 回答