2011-04-06 30 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

相關問題