IQIeryable to List
我知道IQueryable不会产生任何结果,只是一个表达式构建器,我的问题是如何实际使用它来执行查询并将集合作为List返回以便能够在网格上绑定它。
IQueryable query = _campaignManager.GetCampaign(filter, values); // this line returns error List campaigns = query.Cast().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查询
DynamicQueryable的.Select Extension方法
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))); }
谢谢…
IQueryable可以是T类型,例如IQueryable query = + CampaignManager.GetCampaign
但由于你使用的是IQueryable,你可以使用
var enumerator= c.GetEnumerator(); while (enumerator.MoveNext()) { //add these records to some collection say Collection or Campaign or Create any entity with Name and Id and then assign that collection to DataSource }
我试过它的工作你可以继续机智。
使用.NET 4.0并对Dynamic库稍作修改,我们可以实现以下预期结果: var campaigns = query.Cast
甚至var campaigns = query.ToList();
这是怎么做的:
更改:
public abstract class DynamicClass {
至:
public abstract class DynamicClass : System.Dynamic.DynamicObject {
这是使用修改后的库的工作代码:
var query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). OrderBy("CompanyName"). Select("New(CompanyName as Name, Phone)"); foreach (var val in query.Cast().ToList()) Console.WriteLine(string.Format("Name: {0}, Phone: {1}", val.Name, val.Phone));
我们还可以向DynamicQueryable类添加一个重载的扩展方法:
public static IQueryable Select (this IQueryable source, string selector, params object[] values) { return Select(source, selector, values).Cast (); }
然后我们应该可以像这样调用:
var query = db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10). OrderBy("CompanyName"). Select("New(CompanyName as Name, Phone)"); foreach (var val in query.ToList()) Console.WriteLine(string.Format("Name: {0}, Phone: {1}", val.Name, val.Phone));
PS:来自MSDN :
任何对象都可以隐式转换为动态类型。
因此,我们应该能够在没有建议更改的情况下调用Cast
。
上述就是C#学习教程:IQIeryable to List分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1001800.html