Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 使用数据库优先方法EF的where查询的DbContext集_C#_Entity Framework_Dbcontext_Ef Database First - Fatal编程技术网

C# 使用数据库优先方法EF的where查询的DbContext集

C# 使用数据库优先方法EF的where查询的DbContext集,c#,entity-framework,dbcontext,ef-database-first,C#,Entity Framework,Dbcontext,Ef Database First,我有一个数据库第一个项目与ADO.NET实体数据模型生成的类。我所有的类都有相同的布尔值和日期时间字段,Ok和Date。我想创建从DbContext检索T类的通用方法,但我不确定如何在该查询中使用where,因为我无法访问Ok和Date字段 注意:我不能更改生成的类,我希望避免使用Linq.Dynamic Net生成 public partial class First { public int Id { get; set; } public string NameFirst {

我有一个数据库第一个项目与ADO.NET实体数据模型生成的类。我所有的类都有相同的布尔值和日期时间字段,Ok和Date。我想创建从DbContext检索T类的通用方法,但我不确定如何在该查询中使用where,因为我无法访问Ok和Date字段

注意:我不能更改生成的类,我希望避免使用Linq.Dynamic

Net生成

public partial class First
{
    public int Id { get; set; }
    public string NameFirst { get; set; }
    public DateTime Date { get; set; }
    public bool Ok { get; set; }
}

public partial class Second
{
    public int Id { get; set; }
    public string NameSecond { get; set; }
    public DateTime Date { get; set; }
    public bool Ok { get; set; }
}
检索数据

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date)
{
    var dbData = DbContext.Set(typeof(T)).AsNoTracking().Where(x => x.Ok ??? );

    //remap to some model and return it
    ...

    return someModel;
}
public List LoadFromDatabase(bool ok,DateTime-date)
{
var dbData=DbContext.Set(typeof(T)).AsNoTracking(),其中(x=>x.Ok??);
//重新映射到某个模型并返回它
...
回归模型;
}
编辑1:

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T : IDateOk 
{
    var dbData = DbContext.Set(typeof(T)).AsNoTracking().Where(x => x.Ok &&);

    //remap to some model and return it
    ...

    return someModel;
}

public interface IDateOk {
    DateTime Date { get; set; }
    bool Ok { get; set; }
}
public List LoadFromDatabase(bool ok,DateTime date),其中T:IDateOk
{
var dbData=DbContext.Set(typeof(T)).AsNoTracking(),其中(x=>x.Ok&);
//重新映射到某个模型并返回它
...
回归模型;
}
公共接口IDateOk{
日期时间日期{get;set;}
bool Ok{get;set;}
}
编辑2: 我在方法中缺少类,所以应该是这样的

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T : class IDateOk 
public List LoadFromDatabase(bool ok,DateTime date),其中T:class-IDateOk

为公共属性定义一个接口:

public interface IDateOk {
    DateTime Date { get; set; }
    bool Ok { get; set; }
}
以下是如何将接口添加到生成的类的教程:

将方法约束为需要此接口:

public List<SomeModel> LoadFromDatabase<T>(bool ok, DateTime date) where T: IDateOk 
public List LoadFromDatabase(bool ok,DateTime date),其中T:IDateOk

现在,您应该可以在实现中访问OK和Date。

我做了更改,您建议您可以在Edit 1中看到它们,不幸的是,我在dbData query中得到了“无法解析符号OK”。你知道为什么吗?嗯,也许我没有想清楚,EF无法将查询转换成SQL。为了验证这一假设,请尝试通过首先枚举在内存中运行查询:
var dbData=DbContext.Set(typeof(T)).AsNoTracking().ToList().Where(x=>x.Ok)谢谢你的帮助,这让我找到了最终的解决方案