加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读