我有一个HQL查询,可以生成IList结果或IEnumerable结果。
但是,我希望它返回我正在选择的实体数组,实现它的最佳方法是什么?我可以枚举它并构建数组,或者使用CopyTo()定义数组。
还有更好的方法吗?我选择了CopyTo方法。
答案 0 :(得分:147)
您使用的是哪个版本的.NET?如果它是.NET 3.5,我只需要调用ToArray()
并完成它。
如果您只有非通用IEnumerable,请执行以下操作:
IEnumerable query = ...;
MyEntityType[] array = query.Cast<MyEntityType>().ToArray();
如果您不知道该方法中的类型但该方法的调用者确实知道它,请将该方法设为通用并尝试:
public static void T[] PerformQuery<T>()
{
IEnumerable query = ...;
T[] array = query.Cast<T>().ToArray();
return array;
}
答案 1 :(得分:40)
将以下内容放入.cs文件中:
using System.Linq;
然后,您将能够使用System.Linq.Enumerable中的以下扩展方法:
public static TSource[] ToArray<TSource>(this System.Collections.Generic.IEnumerable<TSource> source)
即
IEnumerable<object> query = ...;
object[] bob = query.ToArray();
答案 2 :(得分:6)
我想重新发明轮子......
public static T[] ConvertToArray<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null)
throw new ArgumentNullException("enumerable");
return enumerable as T[] ?? enumerable.ToArray();
}
答案 3 :(得分:2)
如果您没有Linq,我会通过以下方式解决它:
private T[] GetArray<T>(IList<T> iList) where T: new()
{
var result = new T[iList.Count];
iList.CopyTo(result, 0);
return result;
}
希望有所帮助