Csharp/C#教程:可以列出的IQueryable分享


可以列出的IQueryable

我正在使用System.Linq.Dynamic来允许我从查询中动态选择字段列表,如下所示:

finalQuery = query.Select(string.Format("new({0})", string.Join(",", selectors))); 

selectors只是一个List ,包含我想要的所有字段。 这很好用,但是这个版本的扩展方法Select返回一个IQueryable 。 这不是 IQueryable 。 如果我有一个IQueryable我可以简单地做一个.ToList()将它转换成一个列表并强制查询实际在数据库上运行,但是使用非genericsIQueryable ,该方法不存在。

这是因为ToListinheritance自IEnumerableIQueryableinheritance而且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

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐