你写了:
我们有一个名为 TOTAL 的变量,它应该被替换为...
唉,LINQ 旨在从序列中选择数据。LINQ 不会更改输入序列。
幸运的是,您还写道:
我有一组 IQueryrable 的 CClass 对象,我想从这个集合中选择 (TOTAL + AProperty)。
好的,我们可以做到。
我不想改变我的班级...
当然,您不想更改实体类:您的实体类代表数据库中的表以及这些表之间的关系。您的函数不是通常属于您的数据库表的东西。因此它不属于那里。
因此,我们将为您的实体编写一个单独的扩展函数,而不是更改您的实体类。对于您的班级的用户,它看起来好像该函数是班级的一部分。请参阅揭秘的扩展方法
我不会为您编写函数IQueryable<CClass>
,我将为任何可查询的对象序列编写函数
输入:某种类型的可查询对象序列和一个双精度值Value
。
另外:a> 属性选择器,它选择具有双精度值的对象的获取属性。
输出:获取属性的总和Value
和值。
public static double AddToProperty<TSource> (this IEnumerable<TSource> source,
Expression<Func<TSource, double>> propertySelector,
double value);
where Tsource : class
{
return source.Select(soureElement => propertySelector(sourceElement) + value);
}
用法:
var addedTotals = myDbContext.Students
.AddToPropery( student => student.AnnualIncome, 3.14);