【发布时间】:2022-10-04 20:47:27
【问题描述】:
我必须在我的 LINQ 查询中的 db1 表上添加一个 .Where() 子句,如下所示:
var query = from db1 in db.db1
join db2 in db.database2 on db1.atr1 equals db2.atr1
join db3 in db.database3 on db1.atr1 equals db3.atr1
select new { db1, db2, db3};
我已将 Lambda 表达式添加到没有连接子句的查询中,但无法弄清楚您何时拥有这些“嵌套”表。代替:
query = query.Where(t => t.attr5.Contains("String"));
它必须是:
query = query.Where(t => t.db1.attr5.Contains("String"));
我为 Where() 构建 lambda 的代码如下所示:
ParameterExpression eParam = Expression.Parameter(tableType, "innerTable");
MethodInfo method = filterValue.GetType().GetMethod("Contains", new Type[] { typeof(string) }); // filterValue is just a string
MethodCallExpression call = Expression.Call(Expression.Property(eParam, filterField), method, Expression.Constant(filterValue));
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(call, eParam);
currentQuery = currentQuery.Where(lambda);
tableType 是一个变量,我在其中获得带有 select new 语句的表的 PropertyType,但它会抛出错误,因为它与对象 select new { db1, db2, db3 } 不匹配。
我假设我需要再做一个:
ParameterExpression eParam = Expression.Parameter(typeof(T), "item");?不知何故. 在MethodCallExpression 之前,但不确定。
【问题讨论】:
标签: c# entity-framework