如何用LINQ在C#中更改IQueryable字段中的值
我有一个变量用于存储来自存储库的选择投影。该变量中的字段为month
和value
。在特殊情况下,我希望将所有数据除以100,而不更改变量的名称并将信息保留在月份字段中。如何用LINQ在C#中更改IQueryable字段中的值
我知道LINQ的程序通过使用InsertonSubmit()
永久性地存储库中的项目,但我不想存储记录,只是让它们在我的应用程序上下文中进行修改。在此我添加一些代码。我知道这是错的,但只是为了更好地了解我在找什么。
在此先感谢。
var lmonthlyTargetvalue = lmonthlyReport
.Select(m => new { m.Monthly_TargetValue, m.Month });
//If the Target value is percentual it is divided by 100
if (!Absolute)
{
foreach (var monthRecord in lmonthlyTargetvalue)
{
var lvalue = lmonthlyTargetvalue.
Where(m => m.Month == monthRecord.Month).
Select(m => m.Monthly_TargetValue).First();
lvalue = lvalue/100;
}
}
UPDATE:
最后,我已经能够做到这一点感谢你的贡献。在这里我列出了解决方案:
var lmonthlyTargetvalue = lmonthlyReport.Select(m => new
{
Monthly_TargetValue = absolute ? m.Monthly_TargetValue : m.Monthly_TargetValue/100,
m.Month
});
也许像这样(作为查询表达式);
var lmonthlyTargetvalue = from m in lmonthlyReport
let Monthly_TargetValue = absolute ? m.Monthly_TargetValue : m.Monthly_TargetValue/100
select new { Monthly_TargetValue , m.Month };
这可能是轻微的矫枉过正,因为它在幕后引入了一个额外的匿名类型。这也可以;
var lmonthlyTargetvalue = lmonthlyReport.Select(m => new
{
Monthly_TargetValue = absolute ? m.Monthly_TargetValue : m.Monthly_TargetValue/100,
m.Month
});
感谢您的回答,但它在语法上不正确,对不起 – CiccioMiami 2011-04-06 11:02:18
@Francesco:你为什么这么想?它编译并运行得很好,它会产生与您在更新原始问题中发布的代码相同的结果。 – 2011-04-06 11:12:25
完美,它有效地完成了它的工作!非常感谢 – CiccioMiami 2011-04-06 12:10:26
//If the Target value is percentual it is divided by 100
if (!Absolute)
{
lmonthlyReport.Select(m => new { m.Monthly_TargetValue, m.Month, dividedValue = m.Monthly_TargetValue/100 });
}
感谢您的回答,但它在语法上不正确,对不起 – CiccioMiami 2011-04-06 10:25:19
我编辑答案,尝试它:) – archil 2011-04-06 10:45:46
谢谢但这种方式它创建另一个字段“dividedValue”。我需要保持Monthly_TargetValue,这样我可以避免大量重复的代码。 – CiccioMiami 2011-04-06 10:52:22
也许是这样的:
var lmonthlyTargetvalue =
lmonthlyReport.Select(m => new
{
IsAbsolute(m.Monthly_TargetValue) ? m.Monthly_TargetValue : m.Monthly_TargetValue/100,
m.Month
});
哪里IsAbsolute为你使用任何功能检查目标值是否是一个百分比或没有。
这将立即投影正确的值到您的变量
非常感谢您的回答,但它在语法上不正确。当然,我创建了一个返回一个bool值的方法IsAbsolute。编译器不喜欢它,对不起 – CiccioMiami 2011-04-06 10:31:36
这应该工作;
IQueryable<lmonthlyReport> lmonthlyTargetvalue = lmonthlyReport
.Select(m => new { m.Monthly_TargetValue, m.Month });
IList<lmonthlyReport> _temp = new List<lmonthlyReport>();
foreach(var item in lmonthlyTargetvalue){
_temp.Add(new lmonthlyReport {
Monthly_TargetValue = item.Monthly_TargetValue/100,
Month = item.Month
});
}
return _temp.AsQueryable();
你给这个试试吗? – tugberk 2011-04-06 10:43:02
我想你已经做到了,虽然有点“肮脏”的做法。不要误解我的意思,我非常感谢你的帮助。不知道围绕这个比赛是你可以给出的最佳答案!非常感谢 – CiccioMiami 2011-04-06 10:54:20
@Francesco是的,你是对的,但我在这里没有看到任何替代品?你知道吗?别客气。 – tugberk 2011-04-06 10:59:48
绝对从哪里来? – 2011-04-06 10:17:29
这只是一面旗帜。它属于另一个对象 – CiccioMiami 2011-04-06 10:33:19