简体   繁体   English

如何在LINQ中减去两个日期?

[英]How to subtract two dates in LINQ?

I have a problem with subtracting two dates in the MySQL database and comparing them to int numbers. 我有一个问题,在MySQL数据库中减去两个日期,并将它们与int数字进行比较。 I tried to use dbfunctions.diffdays however it is a conflict of types. 我试图使用dbfunctions.diffdays,但它是类型的冲突。

When I start the application I get a message: 当我启动应用程序时,我收到一条消息:

System.ArgumentException: 'DbArithmeticExpression arguments must have a numeric common type.' System.ArgumentException:'DbArithmeticExpression参数必须具有数字公共类型。'

Below is my code i 以下是我的代码i

    int intervalDay = 25;
    var dateCount = (from Rezerwacje in db.Rezerwacje
                     join rooms in db.rooms on Rezerwacje.PokojID equals rooms.id
                     where (rooms.floor > 0 && rooms.floor <= 2) &&(Rezerwacje.DataDo == dateTime) && ((Rezerwacje.DataDo - Rezerwacje.DataOd).Days > intervalDay)
                     select Rezerwacje).Count();
                     return dateCount;

You could use System.Data.Objects.EntityFucntions 您可以使用System.Data.Objects.EntityFucntions

and in the code: 并在代码中:

where ... &&
      EntityFunctions.DiffDays(Rezerwacje.DataDo, Rezerwacje.DataOd) > intervalDay
 using System.Data.Entity;

 //code in LINQ
 ... DbFunctions.DiffDays(Rezerwacje.DataDo, Rezerwacje.DataOd) >= intervalDay

Ultimately I use List and foreach. 最终我使用List和foreach。

Downloading data from database: 从数据库下载数据:

public int DateCleanFloor1to2(DateTime dateTime)
{
            var dateList = (from Rezerwacje in db.Rezerwacje
                            join rooms in db.rooms on Rezerwacje.PokojID equals rooms.id
                            where (rooms.floor > 0 && rooms.floor <= 2) && (Rezerwacje.DataDo == dateTime)
                            select Rezerwacje).ToList();

            return SubtractDateToDateFrom(dateList, dateTime.AddDays(25));
 }

And method with foreach loop: 和foreach循环的方法:

public int SubtractDateToDateFrom(List<Rezerwacje> dateList, DateTime dateTime)
{
            int count = 0;
            foreach (var item in dateList)
            {
                if (item.DataDo < dateTime)
                {
                    count++;
                }
            }

            return count;
}

@DevilSuichiro @Arulkumar @Seven @DevilSuichiro @Arulkumar @Seven

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

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