c# - Entity Framework 从用户指定的表中选择

标签 c# mysql sql entity-framework

我已经在这个主题上浏览了一段时间,但我找不到我真正理解的答案(或者有人询问足够接近的问题)。

问题描述: 我有一个包含多个表的数据库,例如 applesorangesbananas。每个下面都有一堆信息。其中一个属性很常见,例如 expirationDate

我需要用户能够查询其中一个的过期日期(例如 appleid=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/

相关文章:

c# - "Substring"一个数值

c# - 如何使用 LINQ 和 Entity Framework 查询具有 'AND' 条件的多对多关系

MySQL 查询;查找两个人是否共享同一组

SQL + 具有不同行集的内部选择

c# - unity 协程 yield return null EQUIVALENT with Task async await

c# - 从多个 BitmapImage 创建 Tiff 文件

mysql - 如何在 MySQL 中为 SET 类型设置超过 1 个默认值?

php - while 循环内部 if 语句困惑

sql - 你如何在 tsql contains 函数中搜索 & (符号)?

sql - INSERT SELECT FOR UPDATE ON CONFLICT 的语义 DO NOTHING RETURNING