2017-02-07 8 views
0

단일 linq 쿼리의 결과를 단일 IQueryable 문에 저장할 수 있는지 궁금합니다. 나는 모든 항목 기계 ID 일치를 얻기 위해 노력하고Iqueryable에서 여러 linq 쿼리의 결과 저장

//Where OnDemandHistory is the table 
IOrderedQueryable<OnDemandHistory> A; 

foreach (int id in machineID) 
{ 
    A = OnDemandHistory.Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate); 
    // I want to Order all results before writing to the table 
    foreach(var entry in A) 
    {   
     // I add to a table based on all entries found in A 
    } 
} 

:

은 내가 foreach 문에서 사용하는 쿼리가 있습니다. 아니. MachineID가 다양합니다 (사용자에 따라 다름).

쿼리 결과를 모두 저장 한 후 테이블에 추가하기 전에 OrderByDescending을 수행 할 수 있는지 궁금합니다.

는 내가이 일을하려고하지만 경우가 발생하지 않을 것이라는 내부 foreach 루프로 인해 알고

foreach (int id in machineID) 
{ 
    A = OnDemandHistory.Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate); 
    // I want to Order all results before writing to the table  
} 

foreach(var entry in A) 
{   
    // I add to a table based on all entries found in A 
} 

내가 지역 변수에게 초기화되지 않은 오류가 발생,

어떻게 것 이 문제를 해결 하시겠습니까? 오류 때문에 첫 번째 쿼리의 최종 결과로 발생

답변

1

사전에

감사는, 그래서이 널 (null) 결과 또는 A의 uninitialisedvalue 중 하나가 발생할 수 있습니다 machineID의 마지막 값의 결과를 생산 초기화해야합니다. 또한 A가 단순한 목록 일 수 있다고 생각합니다. 다음 행이 있는지 확인하는 데 두 번째 루프를 실행

A = new List<OnDemandHistory>(); 
foreach (int id in machineID) 
{ 
    A.AddRange(OnDemandHistory 
    .Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate).ToList());   
} 
// order A here 

:

당신은 뭔가를해야합니다. 그러나 LINQ에는 쿼리의 일부분 인 machineID을 하나의 LINQ 문으로 연결하는 것이 더 똑똑합니다.

+0

, 그것은 여전히 ​​같은 결과를 내가 가진로서, 나는'A.OrderByDescending (C => C를 추가했습니다. 아직 아무것도 없음 –

+0

두 번째 루프를 시작하기 전에 코드 디버깅을 시도하고 A의 내용을 중단 점으로 검사 해 보았습니까? 'OnDemandHistory'의 정의와 더불어 몇몇 샘플 데이터가 도움이 될 것입니다. –

+0

귀하의 의견은 나에게 내 문제를 해결하는 데 도움이되는 아이디어를주었습니다. 나는 'OnDemandHistory' 테이블 자체를보고 비슷한 쿼리를 실행했는데 MachineID가 아닌 다른 필드로 정렬했습니다. 도움을 주셔서 감사합니다. –

3

당신은 Contains 문을 사용하여 훨씬 간단하게 수행 할 수 있습니다

내가 코드를 시도
var result = OnDemandHistory.Where(c => machineID.Contains(c.MachineID)) 
          .OrderByDescending(c => c.ODHisDate); 
+0

이전에이 방법을 시도했는데 변환 오류가 있습니다 "int에서 int로 변환 할 수 없습니다 " –

+0

그러면'OnDemandHistory'가 실제로 무엇인지에 따라'machineID'에 0이 포함되지 않는다고 가정하면'c.MachineID.GetValueOrDefault()'또는'c.MachineID.Value'를 사용할 수 있습니다. –