Я знаю, что IQueryable не дает результата, а только построитель выражений, моя проблема в том, как на самом деле использовать его для выполнения запроса и вернуть набор в виде списка, чтобы иметь возможность связать его с сеткой.
IQueryable query = _campaignManager.GetCampaign(filter, values);
// this line returns error
List<Campaign> campaigns = query.Cast<Campaign>().ToList();
grdCampaigns.DataSource = campaigns;
grdCampaigns.DataBind();
дополнительные сведения: GetCampaign ()
public IQueryable GetCampaign(string filter, params object[] values)
{
string parameters = string.Empty;
foreach (object obj in values)
{
parameters += obj.ToString() + ",";
}
parameters.Remove(parameters.Count() - 1, 1);
var query = context.Campaigns.Where(filter, parameters)
.Select("new(CampaignID,CampaignName)");
return query;
}
Я использую DynamicQueryable для динамических запросов linq
Метод расширения .Select для DynamicQueryable
public static IQueryable Select(this IQueryable source, string selector, params object[] values)
{
if (source == null) throw new ArgumentNullException("source");
if (selector == null) throw new ArgumentNullException("selector");
LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, null, selector, values);
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Select",
new Type[] { source.ElementType, lambda.Body.Type },
source.Expression, Expression.Quote(lambda)));
}
IQueryable .Where () расширение
public static IQueryable Where(this IQueryable source, string predicate, params object[] values)
{
if (source == null) throw new ArgumentNullException("source");
if (predicate == null) throw new ArgumentNullException("predicate");
LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values);
return source.Provider.CreateQuery(
Expression.Call(
typeof(Queryable), "Where",
new Type[] { source.ElementType },
source.Expression, Expression.Quote(lambda)));
}
спасибо ...