我有一个HQL查询,可以生成IList结果,或IEnumerable结果.
但是,我希望它返回我正在选择的实体数组,实现它的最佳方法是什么?我可以通过它枚举并构建数组,或者使用CopyTo()定义的数组.
有没有更好的方法?我选择了CopyTo方法.
Jon*_*eet 157
您使用的是哪个版本的.NET?如果它是.NET 3.5,我只需要调用ToArray()并完成它.
如果您只有非通用IEnumerable,请执行以下操作:
IEnumerable query = ...;
MyEntityType[] array = query.Cast<MyEntityType>().ToArray();
Run Code Online (Sandbox Code Playgroud)
如果您不知道该方法中的类型但该方法的调用者确实知道它,请将该方法设为泛型并尝试:
public static void T[] PerformQuery<T>()
{
IEnumerable query = ...;
T[] array = query.Cast<T>().ToArray();
return array;
}
Run Code Online (Sandbox Code Playgroud)
小智 44
将以下内容放在.cs文件中:
using System.Linq;
Run Code Online (Sandbox Code Playgroud)
然后,您将能够使用System.Linq.Enumerable中的以下扩展方法:
public static TSource[] ToArray<TSource>(this System.Collections.Generic.IEnumerable<TSource> source)
Run Code Online (Sandbox Code Playgroud)
即
IEnumerable<object> query = ...;
object[] bob = query.ToArray();
Run Code Online (Sandbox Code Playgroud)
我想重新发明轮子......
public static T[] ConvertToArray<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null)
throw new ArgumentNullException("enumerable");
return enumerable as T[] ?? enumerable.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
如果你没有 Linq,我通过以下方式解决了这个问题:
private T[] GetArray<T>(IList<T> iList) where T: new()
{
var result = new T[iList.Count];
iList.CopyTo(result, 0);
return result;
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
119920 次 |
| 最近记录: |