我正在尝试将以下LINQ查询转换为表达式树
var queryActivity = uow.PromoActivityMeasuresRepository.ToQueryable();
var queryMeasure = uow.PromoMeasuresRepository.ToQueryable();
queryActivity.Where(pa => pa.WorkSpaceId == 28 &&
!queryMeasure.Any(pm => pm.WorkSpaceId == pa.WorkSpaceId &&
pm.Organization == pa.Organization &&
pm.MeasureCode == pa.MeasureCode));
我已经能够获得与简单约束相关的表达式,但是现在我仍然停留在如何创建与queryMeasure.Any
相关的表达式上>
带代码
//I've translated pm.WorkSpaceId == pa.WorkSpaceId var childParameter = Expression.Parameter(childEntityType, "pa"); var parentParameter = Expression.Parameter(validatingEntityType, "pm"); var parentWorkSpace = Expression.Property(parentParameter, "WorkSpaceId"); var childWorkSpace = Expression.Property(childParameter, "WorkSpaceId"); var parentChildWorkSpaceConstraint = Expression.Equal(parentWorkSpace, childWorkSpace);
和代码
// I've translated pm => pm.WorkSpaceId == pa.WorkSpaceId && // pm.Organization == pa.Organization && // pm.MeasureCode == pa.MeasureCode) Expression logicalAnd = null; foreach (var field in FKChildEntity.Value.Fields) { var parentLeft = Expression.Property(parentParameter, field); var childRight = Expression.Property(childParameter, field); var parentChildConstraint = Expression.Equal(parentLeft, childRight); if (logicalAnd == null) { logicalAnd = Expression.AndAlso(parentChildWorkSpaceConstraint, parentChildConstraint); continue; } //parentConstraints.Add(parentChildConstraint); logicalAnd = Expression.AndAlso(logicalAnd, parentChildConstraint); }
这里是问题...
我不明白如何调用queryMeasure。以后在NegateExpression中将要使用的任何东西
var parentDelegateType = typeof(Func<,>).MakeGenericType(validatingEntityType, typeof(bool)); var parentPredicate = Expression.Lambda(parentDelegateType, logicalAnd, parentParameter); var promoMeasuresParameter = Expression.Constant(dataRepository, dataRepository.GetType()); var AnyMethod = Expression.MakeMemberAccess(promoMeasuresParameter, promoMeasuresParameter.GetType().GetMember("Any").FirstOrDefault()); var parentQueryable = dataRepository.GetType().InvokeMember("ToQueryable", BindingFlags.InvokeMethod, null, dataRepository, null); var collectionParameter = Expression.Parameter(parentQueryable.GetType(), "parentCollection"); var AnyMethodExpression = Expression.Call(parentQueryable.GetType(), "Any", null , parentPredicate); var negateExpression = Expression.Negate(AnyMethodExpression);
我可以问你们中的一些如何进行的提示吗?
谢谢大家
我正在尝试将以下LINQ查询转换为表达式树var queryActivity = uow.PromoActivityMeasuresRepository.ToQueryable(); var queryMeasure = uow.PromoMeasuresRepository.ToQueryable(...
您要调用的Any
方法是通用的(Where
也是如此: