C#where,然后选择

本文关键字:选择 然后 C#where | 更新日期: 2023-09-27 18:20:41

有人能帮忙解释一下下面代码中发生了什么吗?非常感谢!结果是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;

C#where,然后选择

如果您查看该表达式的方法链接语法版本,就会更容易理解:

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)相同。

由于类定义了自己的Where方法,因此使用这些方法而不是Linq定义的方法,因为如果可用,则总是选择实例方法而不是扩展方法。此外,这些方法无论如何都不适用。

第一个返回全大写的MEO-cat,然后第二个返回全小写的MEO-cat。

select是一个扩展方法,并将委托应用于最后一个对象。

这些是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"));