c# - 可以从不同对象集返回的谓词或动态 Linq?

标签 c# linq entity-framework predicate dynamic-linq

假设我在 Entity Framework 支持的项目 Cars 和 Trucks 中有两个实体集。 Car 和 Truck 都实现了 IDriveable

是否可以让 Predicate 或 Dynamic Linq 返回特定的 IDriveable,而调用函数不必知道它是从哪个集合加载的?

我见过的每个 Dlinq 示例都有这样的内容:

db.Cars.Where("ID==123");

“动态”部分出现在我们已经选择了表格/集合之后。我需要类似的东西

db.SomeMethod("Cars.Where(ID==123)");

至于谓词,到目前为止我看到的例子都是作用于列表的函数,比如:

static bool greaterThanTwo(int arg)
{
    return arg > 2;
}

假设我们已经有了对所需集合的引用。我需要一些方法来动态地告诉它从哪个表加载记录以及过滤记录的唯一 ID。

最佳答案

我不确定我是否完全理解这个问题,但似乎您并不真的需要动态查询,只需要查询哪个数据库集即可。如果是这种情况,并且您正在按 id 过滤,那么这样的事情可能会起作用:

var type = Assembly.GetCallingAssembly().GetTypes().Single(x => x.Name == "Car");
var method = db.GetType().GetMethod("Set", BindingFlags.Instance | BindingFlags.Public).MakeGenericMethod(type);
var set = (DbSet) method.Invoke(db, new object[0]);
var myDrivableThing = (IDrivable) set.Find(id);

这是完全未经测试的,可能无法编译,所以对此持保留态度,但它应该为您提供所需的任何动态类型的 dbset,然后使用 find 方法通过 id 获取项目。哦,另外,我假设您在示例中拥有的数据库是 DbContext,或者是从 DbContext

继承的东西

关于c# - 可以从不同对象集返回的谓词或动态 Linq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672597/

相关文章:

c# - LINQ 表达式返回 null

c# - 对于这种使用 BitmapSource 不断更新相机图像的情况,如何避免显式调用 GC.Collect()

c# - 在 XmlDocument 中查找字符串

c# - 模板中的服务器控件如何对数据上下文敏感?

c# - EF LINQ 翻译 : complex query

c# - 如果结果为空,IEnumerable.FirstOrDefaultAsync( predicate )?.ContinueWith() 是否返回?

c# - 如何在javascript中解压缩在C#中压缩的字符串?

c# - 为什么 Enumerable.Empty() 返回一个空数组?

c# - EF Code First 阻止使用 Fluent API 进行属性映射

c# - 如何对以下方法进行单元测试?