【问题标题】:Question about linq query format关于linq查询格式的问题
【发布时间】:2011-07-29 00:45:49
【问题描述】:
var q = (dc.tblHelpCentreQuestions.Where(c => c.userID == UserID));
q.OrderByDescending(c => c.dateSubmitted);
我刚刚习惯了 Linq,并且我正在按提交日期降序对记录进行排序,但是有人可以向我解释为什么我必须这样做 c => c.dateSubmitted 而不仅仅是传递 tblHelpCentreQuestions.dateSubmitted 吗? c=> 有什么作用,为什么需要它?
【问题讨论】:
标签:
c#
asp.net
sql
linq
lambda
【解决方案1】:
这是一个 lambda 表达式。了解他们here。
还要注意 OrderByDescending 返回一个新的 IEnumerable,它不进行就地排序。您将需要阅读有关 Linq 基础知识的文章 here。
【解决方案2】:
c=>c.dateSubmitted 是一个lambda expression,它们与 Linq 一起使用很多。在这种情况下,它是一种选择器。它定义了要订购的类的哪个属性。另一方面,tblHelpCentreQuestions.dateSubmitted 只是一个“值”,它不提供有关属性的信息。
简单地说,lambda 表达式是一种匿名方法。方法需要参数,这就是c=> 的用途。如果你有一个带有两个参数的方法(比如,sender 和 args),你会得到类似(sender, args)=> 的东西。有 Expression Lambdas,它有一个表达式作为它们的主体(就像你的例子一样),还有 Statement Lambdas,它可以有多个指令(或语句) ,因此需要一个 block 来分隔它。 (sender, args)=>{ ... }。它可能有也可能没有返回值。
希望这会有所帮助:)
【解决方案3】:
q = tblHelpCentreQuestions 是可枚举的。它没有 dateSubmitted 属性。它的元素具有该属性。 C 正好代表那个元素