![](/img/trans.png)
[英]Can I call a Lambda Expression with multiple params for a Html Helper?
[英]Can I call a function in a lambda expression?
我想做以下但我認為這不會起作用:
.OrderByDescending(s => Score(s)), ...
private double Score(Story s)
{
DateTime now = DateTime.Now;
TimeSpan elapsed = now.Subtract(s.PostedOn);
double daysAgo = elapsed.TotalDays;
return s.Votes.Count + s.Comments.Count - daysAgo;
}
一種。 這有用嗎? 灣 如果沒有,我是否需要查詢故事,然后按分數對它們進行排序?
是的,如果序列是一系列Story
項,那么它應該有效; 你有什么問題? 請注意,如果Score
不適用於任何實例,則可能值得將其設置為靜態。
另一種選擇是使Score()方法成為Story
或擴展方法的實例方法。
請注意,這僅適用於LINQ到對象; 如果您正在使用LINQ-to-SQL / LINQ-to-Entities等,您需要使用lambda來完成整個事務,或者(僅在LINQ-to-SQL中)使用UDF映射函數(在數據上) context)來計算價值。
使用原始語法的示例(LINQ到對象):
using System.Linq;
using System;
class Story { // declare type
public DateTime PostedOn { get; set; }
// simplified purely for convenience
public int VotesCount { get; set; }
public int CommentsCount { get; set; }
}
static class Program {
static void Main() {
// dummy data
var data = new[] {
new Story { PostedOn = DateTime.Today,
VotesCount = 1, CommentsCount = 2},
new Story { PostedOn = DateTime.Today.AddDays(-1),
VotesCount = 5, CommentsCount = 22},
new Story { PostedOn = DateTime.Today.AddDays(-2),
VotesCount = 2, CommentsCount = 0}
};
var ordered = data.OrderByDescending(s=>Score(s));
foreach (var row in ordered)
{
Console.WriteLine(row.PostedOn);
}
}
private static double Score(Story s) {
DateTime now = DateTime.Now;
TimeSpan elapsed = now.Subtract(s.PostedOn);
double daysAgo = elapsed.TotalDays;
// simplified purely for convenience
return s.VotesCount + s.CommentsCount - daysAgo;
}
}
添加this
(即Score(this Story s)
並且可以使用:
.OrderByDescending(s=>s.Score())
在一個小調,您可以寫
.OrderByDescending(Score)
因為“得分”的簽名符合要求的簽名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.