有人可以帮助解释以下代码中发生的情况吗?非常感谢!结果是meo,但我不明白这两个'在哪里'在这种背景下工作。
public class Cat {
public string Text { get; set; }
public Cat Where(Func<Cat,bool> cond) {
return new Cat {
Text = cond(this)? this.Text.ToUpper(): this.Text.ToLower()
}; }
}
public static class CatExtensions {
public static T Select<T>(this Cat cat, Func<Cat,T> proj)
{
return proj(cat);
}
}
var moggy = new Cat { Text = "Meo" };
var result = from m in moggy
where true
where false
select m.Text;
答案 0 :(得分:4)
如果您查看该表达式的方法链语法版本,则更容易理解:
moggy
.Where(m => true) // returns new Cat { Text = "MEO" }
.Where(m => false) // returns new Cat { Text = "meo" }
.Select(m => m.Text); // returns "meo"
答案 1 :(得分:3)
from a in B where E
被视为与B.Where(a => E)
相同。
由于类定义了自己的Where
方法,因此使用这些方法而不是Linq定义的方法,因为如果可用,实例方法总是选择扩展方法。这些方法也不适用。
第一个返回一个全大写的MEO猫,然后第二个动作,并返回一个全部降低的情况猫。
select是一个扩展方法,并将委托应用于最后一个对象。
答案 2 :(得分:0)
这些是LINQ中的多个Where子句。
通常这就像一个简单的条件
例如,假设我们有一个客户实体,并且我们将所有客户存储在可变结果中,并且我们希望获得FirstName为 John 且LastName为 Doe 的客户,然后我们会做
results.Where(x => (x.FirstName == "John") && (x.LasttName == "Doe"));
现在这段代码可以写成2个Where子句,如
results.Where(x => (x.FirstName == "John"))
.Where(x => (x.LasttName == "Doe"));