2017-05-19 8 views
0

where 절 내에 조건부 피연산자를 사용하는 LINQ 문을 작성하는 데 문제가있어이 사이트를 통해 비슷한 문제가 있는지 확인했습니다. 이 쿼리를 표현하는 더 좋은 방법이있을 것이라고 확신합니다. 값이 XXX은 비교할 개체의 필드를 결정한 결과이며 아래에서 설명합니다. 나는 단지를 비교해야 비교할 때 그러나, registerEntry.AddedDateregisterEntry.PostDate 날짜 시간 유형WHERE 절의 조건부 피연산자를 사용하여 LINQ 쿼리를 수행해야합니다.

var paymentReceivedAmt = (from registerEntry in RegisterEntries 
    where registerEntry.TransactionType != null 
    && registerEntry.TransactionType.Id.SubsystemCode == "A" 
    && registerEntry.Receipt != null 
    && registerEntry.PostDate != null 
    && XXX >= lastInvoicedDate 
    select registerEntry.TransactionAmount.GetValueOrDefault(0)).Sum(); 

XXX =

if registerEntry.AddedDate = registerEntry.PostDate 
    registerEntry.AddedDate 
else 
    registerEntry.PostDate 

값을 : 아래

내가 달성하기 위해 노력하고 무엇인가 날짜가 아닌 날짜

누구든지이 작업을 수행하는 방법에 대해 알고 있습니까?

+0

MSDN 좋은 샘플을 많이 가지고 모든 것을 단순화 할 수 있습니다 https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b를 – jdweng

+0

평등 대신 과제를 사용 하시겠습니까? 'if registerEntry.AddedDate = registerEntry.PostDate'는'if registerEntry.AddedDate == registerEntry.PostDate'와 같지 않습니다 (이중 등호에주의하십시오) –

답변

0

당신이이 ternary operator 시도 할 수 있습니다 사용하고있는 LINQ 공급자에 따라 :

var paymentReceivedAmt = (from registerEntry in RegisterEntries 
    where registerEntry.TransactionType != null 
    && registerEntry.TransactionType.Id.SubsystemCode == "A" 
    && registerEntry.Receipt != null 
    && registerEntry.PostDate != null 
    && (registerEntry.AddedDate == registerEntry.PostDate 
      ? registerEntry.AddedDate 
      : registerEntry.PostDate) >= lastInvoicedDate 
    select registerEntry.TransactionAmount.GetValueOrDefault(0)).Sum(); 
+1

그게 전부입니다! 나는 삼항 해결책을 생각하고 있었지만 표현 방법에 대해서는 확신하지 못했습니다. 도와 줘서 고마워! –

3

왜 그냥 XXX에 대한 registerEntry.PostDate을 사용합니까? 이 registerEntry.AddedDate 동일한 경우,뿐만 아니라 그것을 사용하고

var paymentReceivedAmt = (from registerEntry in RegisterEntries 
    where registerEntry.TransactionType != null 
    && registerEntry.TransactionType.Id.SubsystemCode == "A" 
    && registerEntry.Receipt != null 
    && registerEntry.PostDate != null 
    && registerEntry.PostDate >= lastInvoicedDate 
    select registerEntry.TransactionAmount.GetValueOrDefault(0)).Sum(); 
+0

도움 주셔서 감사합니다. AddedDate가 PostDate (날짜 전용 값)와 동일한 값인 경우 두 값 중 가장 오래된 날짜를 송장 날짜와 비교해야한다는 것을 잊어 버린 것 같습니다. PostDate는 DateTime 유형이지만,이 값의 모든 시간은 항상 00:00:00으로 설정되며 나머지 시간에는 심각한 영향을 미치지 않으면 서 실제 시간을 포함하도록 코드를 변경할 수 없습니다. 다시 한번 감사드립니다 !!! –

+0

@ScottChappa -'AddedDate'와'PostDate'가 같은 값을 가지고 있다면 ** 그것들은 ** 같은 날짜입니다 ** 다른 하나보다 오래된 것은 없습니다. 당신의 모델이'DateTime'에'null'이라는 개념을 가지고 있다면, 당신은 nullable 하나 -'DateTime? '을 사용해야합니다. – DigiFriend