可以列出的IQueryable
我正在使用System.Linq.Dynamic来允许我从查询中动态选择字段列表,如下所示:
finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors)));
selectors
只是一个List
,包含我想要的所有字段。 这很好用,但是这个版本的扩展方法Select
返回一个IQueryable
。 这不是 IQueryable
。 如果我有一个IQueryable
我可以简单地做一个.ToList()
将它转换成一个列表并强制查询实际在数据库上运行,但是使用非genericsIQueryable
,该方法不存在。
这是因为ToList
inheritance自IEnumerable
, IQueryable
inheritance而且IQueryable
显然不会。
那么获得IQueryable
执行查询并给我一个列表的最有效方法是什么? 我可以做这个:
List rtn = new List(); foreach (var o in finalQuery) { rtn.Add(o); }
但似乎他们应该是一种更容易的方式。
编辑:为了回应建议,我尝试了两个:
finalQuery.Cast().ToList();
和:
finalQuery.Cast().ToList();
这两个都给NotSupportedExceptions
提供了消息:
Unable to cast the type 'DynamicClass1' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
这似乎是LINQ to Entities使用匿名类型转换IQueryable.Cast
的方式的限制。 您可以通过将其用作IEnumerable
来解决此问题(您的工作示例IEnumerable
)。 这会导致代码在从DB运行时检索后在.NET运行时执行转换,而不是尝试在数据库引擎中处理它。 例如
IEnumerable finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors))); var result = finalQuery.Cast().ToList();
要么
上述就是C#学习教程:可以列出的IQueryable分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static IList CastToList (this IEnumerable source) { return new List (source.Cast ()); } var finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors))); var result = finalQuery.CastToList();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1016770.html