您可以构建一个表达式树来查询有问题的一个或多个对象:
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);
}
当然,如果您想要的查询很长,这可能会失控,您应该考虑使用部分类添加必要的接口,正如 Justin Morgan 建议的那样。
请注意,此方法假定您的 ObjectSet 集合与您的对象同名,加上一个“s”,即“Invoice”到“Invoices”。如果不是这种情况,即“Person”到“People”,那么您可以使用 System.Data.Entity.Design.PluralizationServices.PluralizationService 来获取正确的名称