繁体   English   中英

如何比较Linq中的年作为日期字段?

[英]How to compare Years in Linq for Date Fields?

我正在使用下面的代码来比较两个日期的年份:

public string GetResultWbyYears()
    {
        using (var context = new DbEntity())
        {
            int yeat = DateTime.Now.Year;
            var holidays = (from rl in context.HolidayMasters
                            where rl.Isactive == true && rl.Isdelete == false //&& rl.HolidayDate.Year == yeat
                            orderby rl.HolidayDate ascending
                            select new HolidayEntity
                            {
                                HolidayDesc = rl.HolidayDesc,
                                HolidayDate = rl.HolidayDate,
                                HolidayId = rl.HolidayId

                            }).ToList().AsEnumerable().Select(x => new HolidayEntity()
            {
                HolidayDesc = x.HolidayDesc,
                HolidayDate = x.HolidayDate,
                Isactive = x.Isactive,
                Isdelete = x.Isdelete,
                HolidayId = x.HolidayId,
                Zones = GetZonesWithSelectedForHolidays(x.HolidayId)
            }).ToList();

            holidays = holidays.Where(n => n.HolidayDate.Year == yeat).ToList();
        }

无法理解上述原因为何不起作用..请帮助我如何按年获取结果。

我在Google上进行了搜索,发现有些文章所做的与我上面所做的相同,但这对我不起作用。 这就是为什么我发布了这个问题。

选择IEnumerable<HolidayEntity> ,然后将其转换为List ,丢失IsactiveIsdelete值,因为它们将是默认值,然后再次选择IEnumerable<HolidayEntity>
实际上,这没有必要。

您的LINQ看起来更漂亮:

public string GetResultWbyYears()
{
    int year = DateTime.Now.Year;
    using (var context = new DbEntity())
    {
        var result = context.HolidayMasters
            .Where(hm => hm.Isactive && !hm.Isdelete && hm.HolidayDate.Year == year)
            .OrderBy(hm => hm.HolidayDate)
            .ToList();

        foreach (var item in result)
            item.Zones = GetZonesWithSelectedForHolidays(item.HolidayId); 
    }
}

或者以其他方式:

public string GetResultWbyYears()
{
    int year = DateTime.Now.Year;
    using (var context = new DbEntity())
    {
        var result = (from hm in dbSet
            where hm.Isactive && !hm.Isdelete && hm.HolidayDate.Year == 2015
            orderby hm.HolidayDate ascending
            select hm).ToList();

        foreach (var item in result)
            item.Zones = GetZonesWithSelectedForHolidays(item.HolidayId); 
    }
}    

我想您的context.HolidayMasters类型为DbSet<HolidayEntity ,因为它具有所有具有相同名称的属性。 否则,请使用一个Select

public string GetResultWbyYears()
{
    int year = DateTime.Now.Year;
    using (var context = new DbEntity())
    {
        var result = (from hm in dbSet
            where hm.Isactive && !hm.Isdelete && hm.HolidayDate.Year == 2015
            orderby hm.HolidayDate ascending
            select new HolidayEntity {
                HolidayDesc = x.HolidayDesc,
                HolidayDate = x.HolidayDate,
                Isactive = x.Isactive,
                Isdelete = x.Isdelete,
                HolidayId = x.HolidayId,
                Zones = GetZonesWithSelectedForHolidays(x.HolidayId)
            }).ToList();
    }
}   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM