【问题标题】:LINQ with non-lambda for Any Contains任何包含的非 lambda LINQ
【发布时间】:2012-01-20 15:56:10
【问题描述】:

您如何使用非 lambda express 执行 Linq 处理以下内容(不起作用):

string[] words = { "believe", "relief", "receipt", "field" }; 
var wd = (from word in words
          select word).Any(Contains ("believe"));

【问题讨论】:

标签: linq


【解决方案1】:

不清楚你认为from wor in words select wor 有什么好处——它真的对你一点帮助都没有。

也不清楚为什么您想要使用 lambda 表达式。显而易见的方法是:

bool hasBelieve = words.Any(x => x.Contains("believe"));

请注意,这不是检查单词列表中是否包含单词“believe”,而是检查单词列表中是否包含任何单词包含“believe”。所以“信徒”就可以了。如果您只是想检查列表是否包含believe,您可以使用:

bool hasBelieve = words.Contains("believe");

编辑:如果您真的想在没有 lambda 表达式的情况下进行操作,则基本上需要伪造 lambda 表达式(或匿名方法)为您所做的工作:

public class ContainsPredicate
{
    private readonly string target;

    public ContainsPredicate(string target)
    {
        this.target = target;
    }

    public bool Apply(string input)
    {
        return input.Contains(target);
    }
}

那么你可以使用:

Func<string, bool> predicate = new ContainsPredicate("believe");
bool hasBelieve = words.Any(predicate);

显然你真的不想这样做......

编辑:当然你可以使用:

var allBelieve = from word in words
                 where word.Contains("believe")
                 select word;

bool hasBelieve = allBelieve.Any();

但这也很丑 - 我肯定会使用 lambda 表达式。

【讨论】:

  • 谢谢乔恩,你怎么能用非 lamda 来做,我想看看它是怎么做的。
  • @NatePet:请参阅我的编辑,但不清楚这是否是您的意思。 “非 lambda”到底是什么意思?
【解决方案2】:

你可以这样做

string[] words = { "believe", "relief", "receipt", "field" };
var wd = (from wor in words
          where wor.Contains("believe")
          select wor);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2016-10-01
    • 2013-06-22
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多