3

fruit如果谓词条件为真,如果返回参数(我知道是输入参数),我会感到困惑。正如以下代码所示:

List<string> fruits = new List<string> {
    "apple",
    "passionfruit",
    "banana",
    "mango",
    "orange",
    "blueberry",
    "grape",
    "strawberry"
};

IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 8);
// query contains: {apple,banana,mango,orange,grape}

IEnumerable<string> query2 = query.Where(fruit => fruits.Contains("apple"));

foreach (string fruity in query2)
{
    Console.WriteLine(fruity);
}

// finally returns: {apple,banana,mango,orange,grape}

因此,如果条件为真,就好像返回了输入。

如果我错了,请指导我

4

3 回答 3

4

Where返回谓词返回的输入的过滤序列true。它依次应用于每个元素,并且该项目要么产生要么丢弃。基本上:

public static IEnumerable<T>(this IEnumerable<T> source, Func<T,bool> predicate)
{
    foreach(var el in source) {
        if(predicate(el) {
            yield return el;
        }
    }
}

看名字:

IEnumerable<string> query2 = query.Where(fruit => fruits.Contains("apple"));

也就是说,对于 every fruit,看看整个集合fruits,注意 final s)是否返回一个苹果。该列表fruits 确实包含apple,因此对于每种水果都是如此。

你可能的意思是:

IEnumerable<string> query2 = query.Where(fruit => fruit.Contains("apple"));
于 2013-01-16T07:57:42.023 回答
1

LINQ Where 返回一个 IEnumerably 集合,其中包含谓词为其返回 true 的所有项目。

在您正在执行的第二个查询fruits.Contains("apple")中,这基本上总是正确的,或者总是错误的。也许您打算执行以下操作:

IEnumerable<string> query2 = query.Where(fruit => fruit == "apple");
//returns: {apple}
于 2013-01-16T07:58:36.580 回答
1

您可以将 .Where lambda 视为 SQL 查询:

SELECT * FROM IEnumerable WHERE Predicate = TRUE;

对我来说,由于 SQL 背景,这是更可取的方式:)

于 2013-01-16T10:58:31.910 回答