Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将实体框架中的日期与存储库模式进行比较_C#_Linq_Entity Framework - Fatal编程技术网

C# 如何将实体框架中的日期与存储库模式进行比较

C# 如何将实体框架中的日期与存储库模式进行比较,c#,linq,entity-framework,C#,Linq,Entity Framework,我尝试在实体框架中使用存储库模式进行查询,如下所示: 名称空间:服务 List<Data.Item> itemToday = repositoryUser.Get(i => i.UserId.Equals(user.Id) && i.Created.Date < DateTime.Now.Date)

我尝试在实体框架中使用存储库模式进行查询,如下所示:

名称空间:服务

List<Data.Item> itemToday = repositoryUser.Get(i => i.UserId.Equals(user.Id) &&
                                               i.Created.Date < DateTime.Now.Date)
                                          .ToList();
List itemToday=repositoryUser.Get(i=>i.UserId.Equals(user.Id)&&
i、 Created.Date
名称空间:数据(我的存储库)

public IEnumerable Get(System.Linq.Expressions.Expression expressionFilter)
{
返回此.dbContext.Set().Where(expressionFilter);
}
这将引发以下错误:

LINQ to实体中不支持指定的类型成员“日期”

我发现这些问题可以通过实体框架方法来解决,转换日期类型并进行比较


  • 但这些解决方案使用了存储在数据命名空间中的EF方法,我在服务命名空间中查询,我不应该调用服务层中的存储库函数,对吗?那么我该怎么做呢?

    既然你把where下传给EF,你就需要用EF的方式来做(看下面)。否则,您将不得不解析查询本身并将正确的查询发送到EF,这并不容易。我可能会编写一个带有特定场景所需参数的方法:

    public List<Data.Item> Get<T>(int id, DateTime createdBeforeDate)
    {
         return this.dbContext.Set<T>().Where(i => i.UserId.Equals(id) &&
                                                   SqlFunctions.DateDiff("DAY", i.Created, createdBeforeDate) > 0))
                                       .ToList();
    }
    

    作为旁注,
    DateTime.Today
    可以代替
    DateTime.Now.Date

    使用
    Linq to Entities
    不支持大多数的网络功能。看看“我不应该在服务层调用存储库函数”->“repositoryUser.Get”这不正是您当前使用“repositoryUser.Get”所做的吗?
    I.Created
    就足够了,我想。@ken2k是的,但我的服务层中没有实体框架引用,所以我不能调用实体框架方法。服务层只是有数据(库)引用,所以我可以调用SeaveToRyUs.GET(),这是公开的,但是我不能调用引用的库(如EF)。建议沿着这些线的东西,但是考虑看<代码> ItTyType。
    public List<Data.Item> Get<T>(int id, DateTime createdBeforeDate)
    {
         return this.dbContext.Set<T>().Where(i => i.UserId.Equals(id) &&
                                                   SqlFunctions.DateDiff("DAY", i.Created, createdBeforeDate) > 0))
                                       .ToList();
    }
    
    List<Data.Item> itemToday = repositoryUser.Get(i => i.UserId.Equals(user.Id) &&
                                                   SqlFunctions.DateDiff("DAY", i.Created, DateTime.Now) > 0))
                                              .ToList();