C# 使用数据库优先方法EF的where查询的DbContext集
我有一个数据库第一个项目与ADO.NET实体数据模型生成的类。我所有的类都有相同的布尔值和日期时间字段,Ok和Date。我想创建从DbContext检索T类的通用方法,但我不确定如何在该查询中使用where,因为我无法访问Ok和Date字段 注意:我不能更改生成的类,我希望避免使用Linq.Dynamic Net生成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 {
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)代码>谢谢你的帮助,这让我找到了最终的解决方案