Próbuję skompilować zawiera wyrażenie.Nie istnieje żadna metoda "Zawiera" dla typu "System.Data.Linq.DataQuery`1 [System.Object] '
private Expression<Func<T, bool>> Contains<T>(string property, IEnumerable<dynamic> values, T item)
{
ParameterExpression pe = Expression.Parameter(item.GetType(), "c");
Expression columnNameProperty = Expression.Property(pe, property);
var someValueContain = Expression.Constant(values, values.GetType());
var convertExpression = Expression.Convert(columnNameProperty, typeof(Guid));
Expression expression = Expression.Call(someValueContain, "Contains", new Type[] { }, convertExpression);
return Expression.Lambda<Func<T, bool>>(expression, pe);
}
w czasie wykonywania Mam ten wyjątek.
"Nie sposób 'zawiera' istnieje od rodzaju 'System.Data.Linq.DataQuery`1 [System.Object]'."
soultion było rzucić wartości parametrów do listy
private Expression<Func<T, bool>> Contains<T>(string property, IEnumerable<dynamic> values, T item)
{
ParameterExpression pe = Expression.Parameter(item.GetType(), "c");
Expression columnNameProperty = Expression.Property(pe, property);
Guidvalues = values.Cast<Guid>().ToList();
var someValueContain = Expression.Constant(Guidvalues, Guidvalues.GetType());
var convertExpression = Expression.Convert(columnNameProperty, typeof(Guid));
Expression expression = Expression.Call(someValueContain, "Contains", new Type[] { }, convertExpression);
return Expression.Lambda<Func<T, bool>>(expression, pe);
}
problem, że lista wartości jest ponad 10.000 więc wydajność była niska i mam ten wyjątek
„The Żądanie przychodzące ma zbyt wiele parametrów Serwer obsługuje maksymalnie 2100 parametrów o wartości . Zmniejsz liczbę parametrów i wyślij ponownie żądanie o wartości . "
ja jakiś sposób, aby zbudować dynamicznie lambda wyrażenie, które generują jak tego zapytania
select * from x where id in (select id from y)
Zawiera jest rzeczywiście metoda rozszerzenie na 'System.Linq.Queryable'. – Aron
Dlaczego "wartości" 'DataQuery