【发布时间】:2011-05-02 09:54:03
【问题描述】:
我正在尝试创建一个在实体框架查询中使用的表达式。 我创建了两个表达式:
public Expression<Func<IEntityPriceDefinition, bool>> IsMatchExpression(long additionId)
{
return x => x.PriceDefinition.AdditionsPrices.Any(a => a.AdditionId == additionId);
}
public Expression<Func<IEntityPriceDefinition, bool>> IsMatchExpression(
long? inviterId, long? routeId, long? luggageTypeId)
{
return x =>
(inviterId.HasValue || routeId.HasValue || luggageTypeId.HasValue) &&
!(
(x.PriceDefinition.InviterId.HasValue && inviterId.HasValue &&
PriceDefinition.InviterId.Value != inviterId.Value) ||
(PriceDefinition.LuggageTypeId.HasValue && luggageTypeId.HasValue &&
PriceDefinition.LuggageTypeId.Value != luggageTypeId.Value) ||
(PriceDefinition.InviterId.HasValue && inviterId.HasValue &&
PriceDefinition.InviterId.Value != inviterId.Value)
);
}
现在我愿意将它们结合起来:
public Expression<Func<IEntityPriceDefinition, bool>> IsMatchExpression(
long? inviterId, long? routeId, long? luggageTypeId, long additionId)
{
return IsMatchExpression(inviterId, routeId, luggageTypeId) &&
IsMatchExpression(additionId);
}
此方法无法编译。我也觉得我做错了什么。我该如何解决?
编辑:
我忘记了重要的部分!问题已更新。
【问题讨论】:
-
@Nicolas78:我需要创建将两个表达式结合起来的表达式。
-
啊好的。好吧,您在这里写的内容会评估这两个表达式,并根据是否满足两者来尝试返回真或假。也许您可以谈谈这些 MatchExpressions 和您的用例,以便我们更好地帮助您。
-
@Nicolas78:你说得对 - 我忘记了重要的事情,我解决了这个问题。
标签: c# .net entity-framework linq-to-entities