2013-10-30 26 views
1

我有一段代碼從列表中進行選擇,並在內部選擇中實例化其他列表並將其複製到其中。選擇一個已經聲明的列表

var rep = Histories.Select(rec => new ReportRecord() 
          { 
           Name = rec.ProductName, 
           Total = rec.AdvanceTotal, 
           BidTotal = rec.LiveTotal 

          }); 

我需要修改這個代碼(我不能因爲有限的LAMBDA技能),這樣var rep前應選擇被實例化。例如:

var rep = new ReportRecord(); 
Histories.Select(c => rep.ProductName=c.Name, 
rep.Total=c.AdvanceTotal, 
rep.BidTotal=rec.LiveTotal); 

你能幫我正確的syntex嗎?

我真的很瞭解你的幫助和指導。

感謝

+2

@Toubi,你的問題對我來說沒有意義。請詳細說明您實際嘗試解決什麼具體問題,而不是請求可能適用或不適用於您的問題的特定語言慣用語。 –

+2

'rep'的類型在你的兩個例子中不同,在第一個例子中它是'IEnumerable ',在第二個例子中它只是'ReportRecord',你需要像Kirk說的那樣做,並且解釋更多*你正在努力做*,而不是問*如何做你認爲可能工作的解決方案來做你想做的事*。這被稱爲[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –

回答

0

Select()方法,你在呼喚很可能將返回IEnumerable<ReportRecord>而不是一個單一的價值。在您的解決方法中,您正在使用單個值。這可能會讓你感到困惑。

1

你的問題很不清楚。如果你澄清一點,那麼我們將能夠更好地回答你的問題。

但是我認爲你想要的是一個ReportRecord的單個實例,其中填充了來自Histories的數據。

var rep = Histories.Select(rec => new ReportRecord() 
          { 
           ProductName = rec.Name, 
           Total = rec.AdvanceTotal, 
           BidTotal = rec.LiveTotal 

          }).First(); 

這將從Histories得到的第一條記錄,然後再填充新ReportRecord與該行的值。

var是佔位符類型。它可以是任何東西。編譯器計算出它應該是什麼。 但是,如果你知道它是什麼,如果你指定了類型,我個人會發現它更清晰。 像這樣:

在:

ReportRecord rep = Histories.Select(rec => new ReportRecord() 
          { 
           ProductName = rec.Name, 
           Total = rec.AdvanceTotal, 
           BidTotal = rec.LiveTotal 

          }).First(); 

我所提供的解決方案將你最想要的,那麼你會用.Last();

更多信息取代.First();給你Histories第一行你的原始代碼示例,你得到一個IEnumerable<ReportRecord>(或可能是一個IQuerable)這是ReportRecords的集合,它不會填充,直到你嘗試從中提取一個值。例如調用First(),ToList(),Sum()。

還有其他的,你可以像這將不運行,直到下使用。凡()的列表,它慣於實際上被稱爲直到調用優先()或類似的東西,如過濾進行操作,

//Get the first record from Histories where the product name is "Magic beans" and populate a new ReportRecord with those values 
ReportRecord rep = Histories.Select(rec => new ReportRecord() 
          { 
           ProductName = rec.Name, 
           Total = rec.AdvanceTotal, 
           BidTotal = rec.LiveTotal 

          }).Where(w => w.Name == "magic beans") 
           .First(); 

這裏是其他LINQ擴展方法的一些例子http://www.nilzorblog.com/2013/05/101-linq-samples-lambda-style.html