C# where 和 select
C# where and select
有人可以帮忙解释一下下面的代码是怎么回事吗?非常感谢!结果是 meo,但我不明白这两个 'where' 在这种情况下是如何工作的。
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;
这些是 LINQ 中的多个 Where 子句。
通常这就像一个简单的 And 条件
例如,假设我们有一个客户实体,我们将所有客户都存储在变量结果中,我们想要获得名字为 John 且姓氏为 [=20 的客户=]Doe,那我们就做
results.Where(x => (x.FirstName == "John") && (x.LasttName == "Doe"));
现在这段代码可以用2个Where子句写成
results.Where(x => (x.FirstName == "John"))
.Where(x => (x.LasttName == "Doe"));
如果您查看该表达式的方法链语法版本,会更容易理解:
moggy
.Where(m => true) // returns new Cat { Text = "MEO" }
.Where(m => false) // returns new Cat { Text = "meo" }
.Select(m => m.Text); // returns "meo"
from a in B where E
被认为与 B.Where(a => E)
.
相同
由于 class 定义了自己的 Where
方法,因此使用这些方法而不是 Linq 定义的方法,因为如果可用的话,总是选择实例方法而不是扩展方法。这些方法也不适用。
第一个 returns 一个全大写的 MEO 猫,然后第二个作用于它,returns 一个全小写的 meo 猫。
select 是一个扩展方法并将委托应用于最后一个对象。
有人可以帮忙解释一下下面的代码是怎么回事吗?非常感谢!结果是 meo,但我不明白这两个 'where' 在这种情况下是如何工作的。
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;
这些是 LINQ 中的多个 Where 子句。
通常这就像一个简单的 And 条件
例如,假设我们有一个客户实体,我们将所有客户都存储在变量结果中,我们想要获得名字为 John 且姓氏为 [=20 的客户=]Doe,那我们就做
results.Where(x => (x.FirstName == "John") && (x.LasttName == "Doe"));
现在这段代码可以用2个Where子句写成
results.Where(x => (x.FirstName == "John"))
.Where(x => (x.LasttName == "Doe"));
如果您查看该表达式的方法链语法版本,会更容易理解:
moggy
.Where(m => true) // returns new Cat { Text = "MEO" }
.Where(m => false) // returns new Cat { Text = "meo" }
.Select(m => m.Text); // returns "meo"
from a in B where E
被认为与 B.Where(a => E)
.
由于 class 定义了自己的 Where
方法,因此使用这些方法而不是 Linq 定义的方法,因为如果可用的话,总是选择实例方法而不是扩展方法。这些方法也不适用。
第一个 returns 一个全大写的 MEO 猫,然后第二个作用于它,returns 一个全小写的 meo 猫。
select 是一个扩展方法并将委托应用于最后一个对象。