gpt4 book ai didi

linq - 按名称检索实体对象 - LINQ to Entities,EF 4.0

转载 作者:行者123 更新时间:2023-12-04 06:34:00 25 4
gpt4 key购买 nike

我有许多结构相同但命名约定不同的实体对象,例如 Products1、Products2、Products3(这是遗留数据库模式的一部分,我对此无能为力)。

就 CLR 而言,这些类具有不同的类型,不幸的是,由于设计代码是自动生成的,因此我无法在这些人身上添加一个接口(interface)来显示共性。所以,我的问题是:有没有办法按名称检索实体对象?

在对这些对象应用基本相同的逻辑时,我基本上想避免切换/案例业务。

最佳答案

您可以构建一个表达式树来查询有问题的一个或多个对象:

public T GetSingleObject<T>(int someValue) {
MyEntities db = new MyEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));

var param = Expression.Parameter(typeof(T));

var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "WhateverPropertyYourComparing"),
Expression.Constant(someValue)),
param);

return result.SingleOrDefault(lambda);
}

或者如果你想要一个对象的集合
public IEnumerable<T> GetResultCollection<T>(int someValue) {
MyEntities db = new MyEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));

var param = Expression.Parameter(typeof(T));

var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "WhateverPropertyYourComparing"),
Expression.Constant(someValue)),
param);

return result.Where(lambda);
}

当然,如果您想要的查询很长,这可能会失控,您应该考虑使用部分类添加必要的接口(interface),正如 Justin Morgan 建议的那样。

请注意,此方法假定您的 ObjectSet 集合与您的对象同名,加上一个“s”,即“Invoice”到“Invoices”。如果不是这种情况,即“Person”到“People”,那么您可以使用 System.Data.Entity.Design.PluralizationServices.PluralizationService 来获取正确的名称

关于linq - 按名称检索实体对象 - LINQ to Entities,EF 4.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com