C#在哪里选择

时间:2015-11-06 00:22:19

标签: c# linq select where func

有人可以帮助解释以下代码中发生的情况吗?非常感谢!结果是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;

3 个答案:

答案 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"));