我使用的是 EF Code First 4.2,
当需要动态构建 where 子句时,您提出什么样的解决方案?
然而,非常需要包含功能:
var results = db.Set<dynamicType>.Where("dynamic conditions").Include("....");
上面的动态条件需要查找另一个表来过滤记录:
如果我想用 Linq 表达式来写它,它会是这样的:
var result = db.Set<Contact>().Where(c=>c.AccountId == _Id_param || db.Set<LinkTable>().Any(a=>a.FkFieldId == c.AccountId && a.ParentId == _Id_param)).Include("Quotes");
我基本上需要上述表达式的动态 linq,因为对于不同类型,Where 子句字段会发生变化(Contact 只是一个示例),例如,在一个模型中,FK 字段可能是“AccountId”,而在另一个模型中,它需要是“AccountFKId” ”。所以Where子句必须是动态的!
IQueryable
是可组合的,因此您可以动态构建查询:
var query = db.Set<Contact>().Include(...);
if (something)
{
query = query.Where(...);
}
// Other wheres
Linq 是强类型的,所以你至少必须知道你要从什么类型开始Set<>
称呼。您可以使其通用但不能动态(除非您要通过反射完整地编写它)。
您可以使用动态链接 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx用字符串定义 where 条件,但同样,您至少必须知道 for 的类型Set<>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)