2016-09-21 51 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循环,如果没有其他解决办法,然后 请回复,否则,因为它上面提到的,我将使用相同的。