【问题标题】:How to add a Case statement to my LINQ Query如何将 Case 语句添加到我的 LINQ 查询
【发布时间】:2015-11-12 18:15:11
【问题描述】:

我有一个使用 Linq 语句填充的 JS 表。我对 LINQ 相当陌生,我真的需要这个 LINQ 语句,这样我才能完成我的项目。 这是我的 LINQ 声明。 (那个 where 语句是错误的,因为数据库值是错误的,linq 会修复一切)

MSCDatabaseDataContext MSCDB = new MSCDatabaseDataContext();
var q = from row in MSCDB.Tbl_Campaigns
        join cs in MSCDB.tbl_StatusOfCampaigns on row.CampaignStatus equals cs.ID
        where ((row.CampaignStatus == 0) ||
           (row.CampaignStatus == 1) ||
           (row.CampaignStatus == 2) ||
           (row.CampaignStatus == 3))
        select new Campaign
        {
            CampaignID = row.CampaignId,
            CampaignName = row.CampaignName,
            Target = Convert.ToInt32(row.Target),
            Discount = Convert.ToInt32(row.Discount),
            CampaignSDate = Convert.ToDateTime(row.StartDate),
            CampaignEDate = Convert.ToDateTime(row.EndDate),
            CurrentStatus = replaceStatus((row.CampaignStatus.ToString())),
            Uptake = Convert.ToInt32(row.Uptake),
        };

我基本上想删除 Where caluse 和内部连接,并且我可以有一个 Case 语句来显示基于日期的值。

CASE 
    WHEN EndDate >= GETDATE() and StartDate <= GETDATE() THEN 'Active' 
    WHEN StartDate >= GETDATE() THEN 'Pending'
    ELSE 'Closed' 
    END as 'CurrentStatus',

我们将不胜感激。 (您可以删除 where caluse 和 inner join,因为它不需要。)

【问题讨论】:

标签: c# mysql linq


【解决方案1】:

通过使用conditional operator,您可以在一行中解决此问题

CurrentStatus = row.EndDate >= DateTime.Now && row.StartDate <= DateTime.Now ? "Active": row.StartDate >=  DateTime.Now ? "Pending": "Closed";

【讨论】:

  • 你能帮我适应代码吗? (我还是个大三学生,对此真的很抱歉。)@Fubo,顺便说一句,我在数据库中没有作为 currentStatus 的列,只有 CampaignStatus,它被显式转换为 CurrentStatus。
  • 这一行应该是“复制和粘贴”,可以替换CurrentStatus = replaceStatus((row.CampaignStatus.ToString())),
  • 哈哈非常感谢@Fubo,你真是个天才! :D
  • 嗯,我听过很多次了。仍然不知道该怎么做。我在哪里以及如何做到这一点? __ 编辑:没关系,找到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2021-07-17
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多