asp.net-mvc如何在"分组依据查询"中调用一个 C# 没有 linq 的方法

发布时间: 2016/10/9 7:06:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我写了一个 LINQ 查询,工作正常,那 LINQ 查询有一组由使用我的 C# 方法转换日期时间从 Miladi 到 hejri 的声明。现在我的目的是︰ 在原始 sql 中编写此 linq 查询

这是我的NewsModel类︰

public class News
{
    public News()
    {
        Months = new List<string>();
    }        
    public int NewsID { get; set; }
    [Required]        
    public string FaTitle { get; set; }        
    public string FaBody { get; set; }        
    public string EnTitle { get; set; }        
    public string EnBody { get; set; }        
    public bool IsImageActive { get; set; }        
    public string NewsImage { get; set; }        
    public string NewsImage2 { get; set; }        
    public bool IsArchived { get; set; }        
    public bool IsDeleted { get; set; }
    public byte[] RowVersion { get; set; }
    [DataType(DataType.DateTime)]        
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}", ApplyFormatInEditMode = true)]
    public DateTime DateUpdate { get; set; }
    [DataType(DataType.DateTime)]        
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}", ApplyFormatInEditMode = true)]
    public DateTime DateCreate { get; set; }
    public int CategoryID { get; set; }
    [ForeignKey("CategoryID")]
    public virtual Category Category { get; set; }
    [NotMapped]
    public int Years { get; set; }
    [NotMapped]
    public List<String> Months { get; set; }
}
}

和我的控制器︰

var Archives = from Records in news
    group Records by new { Years = date.GetYear(Records.DateUpdate, ConvertTime.UTCtoIran) } into GYears
    select new { Years = GYears.Key.Years, Months = (from r in GYears group r by date.GetMonthName(r.DateUpdate) into Gmonths select Gmonths.Key) }.ToExpando();

ViewBag.Archive = Archives;

现在我想要做,与原始 sql 查询,作为 u 在我使用的 LINQ 查询中看到 date.GetYeardate.GetMonthName 是 C# 的方法方法,但不是能在像原始 sql 查询中使用它们 "select date.GetYear(foo) ..."

解决方法 1:

基于您的意见,你想要与列表中相应的几个月年在表记录中,要做到这一点不需要本地函数︰

string query = "select DISTINCT DATEPART(YEAR, dbo.News.DateUpdate) as Year, "
             + "DATEPART(YEAR, dbo.News.DateUpdate) as Month"
             + "from dbo.News";

List<DataHolder> A = db.News.SqlQuery(query).ToList();

var results = (from a in A
                group a by a.Year into grp
                select new
                {
                    Year = grp.Key,
                    Months = grp.Select(x => x.Month).ToList()
                }).ToList();
赞助商