[英]How to: Use async methods with LINQ custom extension method
我有一个LINQ自定义扩展方法:
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> items, Func<T, TKey> property)
{
return items.GroupBy(property).Select(x => x.First());
}
我这样使用它:
var spc = context.pcs.DistinctBy(w => w.province).Select(w => new
{
abc = w
}).ToList();
但问题是我不想要ToList()我想要这样的东西
var spc = await context.pcs.DistinctBy(w => w.province).Select(w => new
{
abc = w
}).ToListAsync();
使用Async。 但是找不到异步。 如何使我的自定义方法distinctBy,所以我也可以异步使用它?
ToListAsync()
扩展方法正在扩展IQueryable<T>
,但您的DistinctBy()
方法正在扩展(并返回)一个IEnumerable<T>
。
显然, ToListAsync()
不适用于IEnumerable<T>
因为它使用Linq-To-Objects(内存中)并且不能阻止(不涉及I / O)。
试试这个:
public static IQueryable<T> DistinctBy<T, TKey>(this IQueryable<T> items, Expression<Func<T, TKey>> property)
{
return items.GroupBy(property).Select(x => x.First());
}
请注意,我还将property
参数从Func<>
更改为Expression<Func<>>
以匹配Queryable.GroupBy
(并避免使用Enumerable.GroupBy
)。
请参阅MSDN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.