首页 > 解决方案 > 在 C# 中将 SQL 转换为 LINQ

问题描述

我无法将下面提到的查询写入 Linq。

SELECT  
  dateentered,  
  sum(Advance) AS amount,  
  CAST(100 * sum(sum(Advance)) OVER (ORDER BY dateentered) 
     / sum(sum(Advance)) OVER () AS numeric(10, 2)) AS percentage 
FROM Portfolio WHERE [Date Funded]>='12/1/2015' and [Date Funded]<='11/30/2020' 
GROUP BY dateentered

我能够在 SQL 中执行,但无法转换为 linq。更多我使用 linqer 进行转换,但它也无法正常工作。

标签: c#sql-serverlinqentity-framework-core

解决方案


SQL 语言是有限的,通常你必须使用 kludges 来获得所需的结果。c# 是一种更加健壮的语言。这是我的查询模型

    class Program
    {
        static void Main(string[] args)
        {
            Context db = new Context();

            var results = db.Portfolio.Where(x => (x.Date_Funded.Date >= DateTime.Parse("12/1/2015")) && (x.Date_Funded.Date <= DateTime.Parse("11/39/2020")))
                .OrderBy(x => x.dateentered)
                .GroupBy(x => x.dateentered.Date)
                .Select(x => new { dateentered = x.Key, sum = x.Sum(y => y.Advance) })
                .Select(x => new
                {
                    dateentered = x.dateentered,
                    amount = x.sum,
                    percentage = Math.Round((100 * x.sum), 2)
                }).ToList();

            
        }
    }
    public class Context
    {
        public List<Portfolio> Portfolio { get; set; }
    }
    public class Portfolio
    {
        public DateTime dateentered { get; set; }
        public decimal Advance { get; set; }
        public DateTime Date_Funded { get; set; }

    }

推荐阅读