c# – 我可以在lambda表达式中调用函数吗?
发布时间:2020-12-15 07:57:04 所属栏目:百科 来源:网络整理
导读:我想做以下但我认为这不会起作用: .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.Com
我想做以下但我认为这不会起作用:
.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; } } 添加一个(即分数(此故事)),您可以使用: .OrderByDescending(s=>s.Score()) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |