2011-04-06 150 views
2

我有一个变量用于存储来自存储库的选择投影。该变量中的字段为monthvalue。在特殊情况下,我希望将所有数据除以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 
}); 
+0

绝对从哪里来? – 2011-04-06 10:17:29

+0

这只是一面旗帜。它属于另一个对象 – CiccioMiami 2011-04-06 10:33:19

回答

1

也许像这样(作为查询表达式);

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 
}); 
+0

感谢您的回答,但它在语法上不正确,对不起 – CiccioMiami 2011-04-06 11:02:18

+0

@Francesco:你为什么这么想?它编译并运行得很好,它会产生与您在更新原始问题中发布的代码相同的结果。 – 2011-04-06 11:12:25

+0

完美,它有效地完成了它的工作!非常感谢 – CiccioMiami 2011-04-06 12:10:26

0
//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 }); 
} 
+0

感谢您的回答,但它在语法上不正确,对不起 – CiccioMiami 2011-04-06 10:25:19

+0

我编辑答案,尝试它:) – archil 2011-04-06 10:45:46

+0

谢谢但这种方式它创建另一个字段“dividedValue”。我需要保持Monthly_TargetValue,这样我可以避免大量重复的代码。 – CiccioMiami 2011-04-06 10:52:22

0

也许是这样的:

var lmonthlyTargetvalue = 
    lmonthlyReport.Select(m => new 
    { 
     IsAbsolute(m.Monthly_TargetValue) ? m.Monthly_TargetValue : m.Monthly_TargetValue/100, 
     m.Month 
    }); 

哪里IsAbsolute为你使用任何功能检查目标值是否是一个百分比或没有。

这将立即投影正确的值到您的变量

+0

非常感谢您的回答,但它在语法上不正确。当然,我创建了一个返回一个bool值的方法IsAbsolute。编译器不喜欢它,对不起 – CiccioMiami 2011-04-06 10:31:36

1

这应该工作;

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(); 
+0

你给这个试试吗? – tugberk 2011-04-06 10:43:02

+0

我想你已经做到了,虽然有点“肮脏”的做法。不要误解我的意思,我非常感谢你的帮助。不知道围绕这个比赛是你可以给出的最佳答案!非常感谢 – CiccioMiami 2011-04-06 10:54:20

+0

@Francesco是的,你是对的,但我在这里没有看到任何替代品?你知道吗?别客气。 – tugberk 2011-04-06 10:59:48

相关问题