转换包含 CASE 值的存储过程?

发布于 2024-10-03 17:42:32 字数 1747 浏览 0 评论 0原文

我有一个基于 CASE 值创建字段的存储过程。我如何在 LINQ 中执行相同的操作?有什么想法吗?

基本上这是旧的存储过程(为了方便起见被截断)

SELECT  M.Period AS 'Period' ,
        C.Code AS 'Group' ,
        C.ClientCode AS 'Code' ,
        C.ClientName AS 'Name' ,
CASE WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) = 0 THEN 'Balanced'
                 WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) > 0 THEN 'Pending'
            END AS 'Status' ,

正如您从上面看到的,案例选择了一个像这样的值

 CASE WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) = 0 THEN 'Balanced'
                 WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) > 0 THEN 'Pending'
            END AS 'Status' ,

所以我已经完成了所有的连接,到目前为止我已经做到了并且它有效。

 var test = from c in C join h in H on c.Code 
        equals h.Code join m in M on c.ClientCode   
        equals m.ClientCode 
        select new 
        { 
            Period=m.Period,
            Group=c.Code,
            Code= c.ClientCode,
            Name= c.ClientName,
            <-- Here is where I need the to display the correct case value-->
        };

我将不胜感激任何反馈或帮助。

I have a stored procedure that creates a field bases on a CASE value. How do I do the same in LINQ? Any ideas?

Basically this is the old stored procedure (truncated for ease)

SELECT  M.Period AS 'Period' ,
        C.Code AS 'Group' ,
        C.ClientCode AS 'Code' ,
        C.ClientName AS 'Name' ,
CASE WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) = 0 THEN 'Balanced'
                 WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) > 0 THEN 'Pending'
            END AS 'Status' ,

As you can see from above the case picks a value like so

 CASE WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) = 0 THEN 'Balanced'
                 WHEN ( SELECT  SUM(Amount) AS Expr1
                        FROM    M
                        WHERE   ( ClientCode = C.ClientCode )
                        GROUP BY ClientCode
                      ) > 0 THEN 'Pending'
            END AS 'Status' ,

So I have done all my joins and I have this so far and it works.

 var test = from c in C join h in H on c.Code 
        equals h.Code join m in M on c.ClientCode   
        equals m.ClientCode 
        select new 
        { 
            Period=m.Period,
            Group=c.Code,
            Code= c.ClientCode,
            Name= c.ClientName,
            <-- Here is where I need the to display the correct case value-->
        };

I would appreciate any feedback or help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谁许谁一生繁华 2024-10-10 17:42:32

试试这个

var test = from c in db.C
select new {
  Period = c.M.Period,
  Group = c.Code,
  Code = c.ClientCode,
  Name = c.ClientName,
  Status = 
      ((from m0 in db.M
    where
      m0.ClientCode == c.ClientCode
    group m0 by new {
      m0.ClientCode
    } into g
    select new {
      SumOfAmount = (System.Int32)g.Sum(p => p.Amount)
    }).First().SumOfAmount) == 0 ? "Balanced" : 
      ((from m0 in db.M
    where
      m0.ClientCode == c.ClientCode
    group m0 by new {
      m0.ClientCode
    } into g
    select new {
      SumOfAmount = (System.Int32)g.Sum(p => p.Amount)
    }).First().SumOfAmount) > 0 ? "Pending" : null
}

Try this one out

var test = from c in db.C
select new {
  Period = c.M.Period,
  Group = c.Code,
  Code = c.ClientCode,
  Name = c.ClientName,
  Status = 
      ((from m0 in db.M
    where
      m0.ClientCode == c.ClientCode
    group m0 by new {
      m0.ClientCode
    } into g
    select new {
      SumOfAmount = (System.Int32)g.Sum(p => p.Amount)
    }).First().SumOfAmount) == 0 ? "Balanced" : 
      ((from m0 in db.M
    where
      m0.ClientCode == c.ClientCode
    group m0 by new {
      m0.ClientCode
    } into g
    select new {
      SumOfAmount = (System.Int32)g.Sum(p => p.Amount)
    }).First().SumOfAmount) > 0 ? "Pending" : null
}
千と千尋 2024-10-10 17:42:32

如果我正确理解了这个问题,那么下面的内容应该可以满足您的需求。

var test = from c in C join h in H on c.Code 
    equals h.Code join m in M on c.ClientCode   
    equals m.ClientCode 
    select new 
    { 
        Period=m.Period,
        Group=c.Code,
        Code= c.ClientCode,
        Name= c.ClientName,
        Status = M.Where(x => x.ClientCode == c.ClientCode).Sum(x => x.Amount) > 0 ? "Pending" : "Balanced"
    };

If I understand the question correctly then something like below should work for your needs.

var test = from c in C join h in H on c.Code 
    equals h.Code join m in M on c.ClientCode   
    equals m.ClientCode 
    select new 
    { 
        Period=m.Period,
        Group=c.Code,
        Code= c.ClientCode,
        Name= c.ClientName,
        Status = M.Where(x => x.ClientCode == c.ClientCode).Sum(x => x.Amount) > 0 ? "Pending" : "Balanced"
    };
轻拂→两袖风尘 2024-10-10 17:42:32

像这样的东西吗?

var test = from c in C join h in H on c.Code 
        equals h.Code join m in M on c.ClientCode   
        equals m.ClientCode 
        select new 
        { 
            Period=m.Period,
            Group=c.Code,
            Code= c.ClientCode,
            Name= c.ClientName,
            CaseValue = c.Where(x => x.ClientCode == c.ClientCode)
                           .Sum(x => x.Amount) == 0 
                               ? "Balanced" : "Pending"
        };

您可能需要调整总和字段(我不知道它存储在哪个表中),并将条件运算符转换为可能的清洁扩展方法,但它应该让您走上正确的轨道。

Something like this?

var test = from c in C join h in H on c.Code 
        equals h.Code join m in M on c.ClientCode   
        equals m.ClientCode 
        select new 
        { 
            Period=m.Period,
            Group=c.Code,
            Code= c.ClientCode,
            Name= c.ClientName,
            CaseValue = c.Where(x => x.ClientCode == c.ClientCode)
                           .Sum(x => x.Amount) == 0 
                               ? "Balanced" : "Pending"
        };

You might need to adjust the sum field (i don't know which table it's stored), and convert the conditional operator to maybe an extension method for cleanliness, but it should get you on the right track.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文