2016-09-21 19 views
1

查詢是這樣的: -分配值不更新列表

labRequestItem.LabTest.Select(p=>p.LabTestICDCodes= labRequests.ICDCodes.Select(t => new ICDCodeList() 
            { 
             ICDCodeId = t.ICDCodeId, 
             ICDCode = t.ICDCodeName, 
             ICDDescription = t.ICDDescription, 
             ICDCodeType = t.ICDCodeType 
            }).ToArray()); 

現在的問題是,LabTestICDCodes沒有與新的列表值從SELECT語句返回更新

+5

你只是調用'Select'。這實際上並沒有做任何事情,因爲LINQ很懶。看起來你應該真的只是在這裏做一個'foreach'循環--LINQ不是爲這樣的副作用而設計的。 –

+1

可能的原因是查詢未枚舉。你可以嘗試在內部Select查詢上調用'ToList()'方法 – Fabjan

+0

@JonSkeet我想從select語句更新屬性,我不想使用foreach循環。我們可以做到這一點嗎?但在這裏它不工作可能是財產不通知它。 – jack123

回答

2

我在Linqpad測試,以下應工作,但請注意:

  • finalResult將是Listtype of LabTestICDCodes(這又是IEnumerable本身)具有新的/修改的值,因爲這是唯一預計的列。你有項目,你想,結果整個對象,值將修改爲預計

    var finalResult = 
    labRequestItem.LabTest.Select(p=>p.LabTestICDCodes= labRequests.ICDCodes.Select(t => new ICDCodeList() 
               { 
                ICDCodeId = t.ICDCodeId, 
                ICDCode = t.ICDCodeName, 
                ICDDescription = t.ICDDescription, 
                ICDCodeType = t.ICDCodeType 
               }).ToArray()).ToList(); 
    
+0

它正在工作,但我想知道爲什麼返回finalResult,因爲沒有我們在哪裏使用this.Is它是強制性的寫這個? – jack123

+0

請理解局部變量以獲得擴展方法 - 「選擇」的返回值,這就像任何方法一樣,在那裏您收集返回值並使用它,原始變量不能用於它,除非明確賦值到結果 –

0

我發現只有通過執行以下步驟來解決這個問題的方法: -

1。在局部變量得到的值

var icdList = labRequests.ICDCodes.Select(t => new ICDCodeList() 
             { 
              ICDCodeId = t.ICDCodeId, 
              ICDCode = t.ICDCodeName, 
              ICDDescription = t.ICDDescription, 
              ICDCodeType = t.ICDCodeType 
             }).ToArray();   
  • 現在通過usinf foreach循環來賦值。
  • foreach (var test in labRequestItem.LabTest) 
                { 
                 test.LabTestICDCodes = icdList; 
                } 
    

    在最後一步我都用foreach循環,如果沒有其他解決辦法,然後 請回復,否則,因爲它上面提到的,我將使用相同的。