我从这个开始:
query
.Take(20)
.Select(item => new
{
id = item.SomeField,
value = item.AnotherField
})
.AsEnumerable()
.ToDictionary(item => item.id, item => item.value);
现在,我想重用除SomeField
and之外的所有内容AnotherField
。
public static Dictionary<int, string> ReusableMethod<T>(
this IQueryable<T> query,
Func<T, int> key,
Func<T, string> value)
{
return query
.Take(20)
.Select(item => new
{
id = key(item),
value = value(item)
})
.AsEnumerable()
.ToDictionary(item => item.id, item => item.value);
}
query.ReusableMethod(item => item.SomeField, item => item.AnotherField);
这可行,但数据库查询选择的数据比需要的多,所以我猜这意味着ReusableMethod
使用 linq-to-objects。
是否可以在仅选择所需数据的同时执行此操作?我要补充一点, Func<> 对我来说仍然是魔法的一部分,所以我可能会遗漏一些明显的东西。
澄清以避免混淆:Take(20)
很好,Select()
不是。