Ale*_*lex 11 .net c# linq extension-methods entity-framework
我有一个LINQ自定义扩展方法:
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> items, Func<T, TKey> property)
{
return items.GroupBy(property).Select(x => x.First());
}
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
var spc = context.pcs.DistinctBy(w => w.province).Select(w => new
{
abc = w
}).ToList();
Run Code Online (Sandbox Code Playgroud)
但问题是我不想要ToList()我想要这样的东西
var spc = await context.pcs.DistinctBy(w => w.province).Select(w => new
{
abc = w
}).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
使用Async.但是找不到异步.如何使我的自定义方法distinctBy,所以我也可以异步使用它?
hai*_*770 17
该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());
}
Run Code Online (Sandbox Code Playgroud)
请注意,我还将property参数更改为Func<>to Expression<Func<>>以匹配Queryable.GroupBy(并避免Enumerable.GroupBy).
请参阅MSDN
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |