Я написал следующий код, но ничего не вышло. Запрос
DbContext.Contacts.Where(c => DbContext.ContactIdentifiers.Any(c0 => c0.ContactId = c.Id and co.Phone = '1'))
protected Expression GetExpressionForField<T>(IQueryable<T> query, WhereFilter filter, List<InstanceRule> rules, Expression expression = null, string suffix = "")
{
var joinExpressionParameter = Expression.Parameter(query.ElementType, suffix + "0");
var property = Expression.Property(joinExpressionParameter, filter.Name);
var joinExpressionBody = Expression.Equal(
property,
WhereExpressionService.ToConstantExpressionOfType(WhereExpressionService.TryCastFieldValueType(filter.Value, WhereExpressionService.AllowTypes[filter.Type]), WhereExpressionService.AllowTypes[filter.Type]));
var joinExpression = Expression.Lambda(joinExpressionBody, joinExpressionParameter);
//return Expression.Call(CollectionAny2.MakeGenericMethod(linqQuery.ElementType), linqQuery.Expression, joinExpression);
try
{
var propertyParentId = Expression.Property(expression, "Id");
var propertyId = Expression.Property(joinExpressionParameter, rules[0].LinkEntityField);
var parentExpressionBody = Expression.Equal(propertyId, Expression.Convert(propertyParentId, typeof(Guid)));
var propertyExpression = Expression.Lambda(parentExpressionBody, new ParameterExpression[] { joinExpressionParameter });
var args = new object[] { joinExpressionBody, parentExpressionBody };
var exp = (BinaryExpression)AndExpMethod.Invoke(null, args);
var resultExpression = Expression.Lambda(exp, joinExpressionParameter);
return Expression.Call(CollectionAny2.MakeGenericMethod(linqQuery.ElementType), linqQuery.Expression, resultExpression);
}
catch (Exception ex) {
var mes = ex.Message;
return null;
}
}
Но результат выдает исключение:
Выражение LINQ 'DbSet .Any (c0 => c0.Value == "1" && c0.ContactId == (Guid) e.Id) 'не может быть переведено. Либо переписайте запрос в форме, которую можно перевести, либо переключитесь на оценку клиента явно, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.