首页 > 解决方案 > 编写 LINQ 尝试创建一个在 C# 程序中运行的 LINQ

问题描述

我目前正在创建一个下拉列表,并希望在编写 LINQ 查询时找到帮助......

这是我要复制的 SQL:

select  
IIf  
    (  
        TA.[LeaseDeptSubmittal] IS NOT NULL  
        AND TA.[LeaseDeptComplete]  IS NULL, 'Lease Dept',  
        IIf  
        (  
            TA.[CompleteDate]              IS NULL  
            AND TA.[RequestAddtnlInfo] IS NOT NULL, 'Need Info',  
            IIf  
            (  
                TA.[RequestDate] IS NULL, '',  
                IIf  
                (  
                    TA.[RequestDate]  IS NOT NULL  
                    AND TA.[CompleteDate] IS NULL, 'Pending', 'Complete'  
                )  
            )  
        )  
    ) , 
Id 
from Tasks TA  

标签: linq

解决方案


您可以IIF直接将其转换为 C# (LINQ) 三元条件运算符,然后您可以按照我的SQL to LINQ Recipe进行操作。

var ans = from TA in Tasks
          select new {
            Status = (TA.LeaseDeptSubmittal != null &&
                      TA.LeaseDeptComplete == null)
                        ? "Lease Dept"
                        : (TA.CompleteDate == null &&
                           TA.RequestAddtnlInfo != null)
                                ? "Need Info"
                                : TA.RequestDate == null
                                    ? ""
                                    : (TA.RequestDate != null && TA.CompleteDate == null) ? "Pending" : "Complete",
            TA.Id
          };

我通常不会这样缩进?:,但是嵌套很深(在一种情况下不必要地冗余)所以我把所有东西都移走了。

我会像这样重新工作以删除多余的测试并清除一些逻辑:

var ans = from TA in Tasks
          select new {
            Status = (TA.LeaseDeptSubmittal != null &&
                      TA.LeaseDeptComplete == null)
                        ? "Lease Dept"
                        : TA.CompleteDate != null
                            ? "Complete"
                            : TA.RequestAddtnlInfo != null
                                ? "Need Info"
                                : TA.RequestDate != null
                                    ? "Pending"
                                    : "",

            TA.Id
          };

推荐阅读