我已经在这个主题上浏览了一段时间,但我找不到我真正理解的答案(或者有人询问足够接近的问题)。
问题描述:
我有一个包含多个表的数据库,例如 apples
、oranges
和 bananas
。每个下面都有一堆信息。其中一个属性很常见,例如 expirationDate
。
我需要用户能够查询其中一个的过期日期(例如 apple
和 id=1
)
用户可以在 GUI 中选择所有这些(带有表名称的组合框和 id
的文本框)
到目前为止我所拥有的: 在后台代码/业务逻辑中,我有以下内容
.
.
.
if(tableName.Equals("apples"))
{
DateTime expDate = getAppleDetails(id)
}
if(tableName.Equals("oranges"))
{
//call function to select the single orangeEntry and do the rest
}
}
DateTime getAppleDetails(long id)
{
using(var db = new myContext())
{
var appleEntry = db.apples.Single(x=>x.id==id);
return appleEntry.ExpDate
}
}
我在寻找什么:
上面的代码向您展示了如何使用更大的数据库,我将不再需要复制大量代码。在同一查询中执行此操作的更好方法是什么?
类似 db.TableNameHere.Single(x=> x.id == id)
?
最佳答案
您可以有一个名为 IExpirationDate
的接口(interface),如下所示
public interface IExpirationDate
{
DateTime ExpirationDate { get; set; }
}
例如,具有 ExpirationDate
的类必须实现 IExpirationDate
public class Orange : IExpirationDate
{
//Other properties of the class
public DateTime ExpirationDate { get; set; } //Property from interface
}
当所有必需的类都实现 IExpirationDate
接口(interface)时,您可以使用一个通用方法来获取其中任何一个的到期日期,如下所示
public static DateTime GetExpirationDate<T>(long id)
where T : class, IExpirationDate
{
using(var db = new myContext())
{
var entry = db.Set<T>.Find(id);
return entry.ExpirationDate;
}
}
现在,要获取 Orange
类的到期日期,您只需调用
var expirationDate = GetExpirationDate<Orange>(id);
关于c# - Entity Framework 从用户指定的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643427/