2017-05-19 53 views
0

我在编写LINQ语句时遇到了麻烦,该语句在where子句中使用了条件操作数,并且没有任何运气查看了相同的问题。我相信有更好的方式来表达这个查询。该值内的值为XXX是确定对象中哪个字段用于比较的结果,并在下面进行解释。在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 

registerEntry.AddedDateregisterEntry.PostDate是DateTime类型,但是日期而不是时间

有没有人有任何想法如何做到这一点?

+0

MSDN有很多很好的样本:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

+0

您的意思是使用赋值而不是平等吗? '如果registerEntry.AddedDate = registerEntry.PostDate'不等于'如果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

为什么不直接使用registerEntry.PostDateXXX?如果它等于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(仅限日期值)具有相同的值,则需要将两个值中最早的值与Invoice日期进行比较。 PostDate是一个DateTime类型,但是这些值的所有时间都将始终设置为00:00:00,并且我无法更改代码以包含实际时间,而对应用程序的其余部分没有严重影响。虽然再次感谢! –

+0

@ScottChappa - 如果'AddedDate'和'PostDate'具有相同的值,**它们是相同的日期**,没有一个比另一个旧。如果你的模型在'DateTime'上有'null'这个概念,你应该使用一个可以为空的'DateTime'。 – DigiFriend