【问题标题】:IF null or empty set 0 LINQIF null 或空集 0 LINQ
【发布时间】:2019-08-12 19:03:45
【问题描述】:

如果没有记录为空或为空,我尝试让此表显示值 0,我正在计算相等的字符串,我的字符串是“sm_red”。

MVC LinQ .NET Framework 4.5

List<string> trae = new List<string>();
            trae = db.SM_App.Where(x => x.sm_canal.ToString() == "EVERYTHING").Select(x => x.sm_categoria).Distinct().ToList();

var query = (from a in trae
             join b in db.SM_App on a equals b.sm_categoria
             where b.sm_canal == "EVERYGHINT" && b.sm_fecha > sDate && b.sm_fecha < fDate
             group b by b.sm_categoria into g
             select new
             {
             Categoria = g.Key,
             Facebook = g.Count(x => x.sm_red == "Facebook"),
             Twitter = g.Count(x => x.sm_red == "Twitter"),
             Instagram = g.Count(x => x.sm_red == "Instagram") 
             }).Distinct().ToList();

2019 年 13 月 8 日更新

我试试这个,但是返回“Count = 0”,并且在视图中什么都不返回

var query = (from a in trae
          join b in db.SM_App on a equals b.sm_categoria into grp
          from c in grp.DefaultIfEmpty()
          where c.sm_canal == "EVERY" && c.sm_fecha > sDate && c.sm_fecha < fDate       
          group c by c.sm_categoria into g
          select new 
          {
            Categoria = g.Key,
            Facebook = g.Count(x => x.sm_red == "Facebook").ToString() == "" ? Convert.ToInt32(g.Key) : 0,
            Twitter = g.Count(x => x.sm_red == "Twitter").ToString() == "" ? Convert.ToInt32(g.Key) : 0,
            Instagram = g.Count(x => x.sm_red == "Instagram").ToString() == "" ? Convert.ToInt32(g.Key) : 0
           }).Distinct().ToList();

【问题讨论】:

  • 假设g来自groupby,那么g不可能为空或null,所以当g没有符合条件的成员时,您的Count将返回零. Count 已经为空的 IEnumerable 返回零。
  • 好的,用整个上下文更新问题
  • 哪个数据访问库(实体框架?)和哪个版本?
  • 目前还不清楚您要达到的目标。此外,您确实显示了代码,但您没有说明它(显然)失败的原因。
  • 实体框架

标签: c# linq model-view-controller


【解决方案1】:

如果您的整个查询返回零记录,那么您的结果中将有零记录。如果你想要一个包含0s 的记录,你必须使用DefaultIfEmpty()

var query = (from a in trae
             join b in db.SM_App on a equals b.sm_categoria
             where b.sm_canal == "EVERYGHINT" && b.sm_fecha > sDate && b.sm_fecha < fDate
             group b by b.sm_categoria into g
             select new {
                 Categoria = g.Key,
                 Facebook = g.Count(x => x.sm_red == "Facebook"),
                 Twitter = g.Count(x => x.sm_red == "Twitter"),
                 Instagram = g.Count(x => x.sm_red == "Instagram") 
             }).Distinct()
               .DefaultIfEmpty(new {
                   Categoria = default(string),
                   Facebook = 0,
                   Twitter = 0,
                   Instagram = 0 
               })
               .ToList();

我不知道在这种情况下您期望什么Categoria 或它的类型,所以我只假设字符串和default(string)null

【讨论】:

  • 嗨,NetMage,我尝试了,但它出错了
  • 如果这导致错误,那是什么?现在您说您使用的是 EF,可能是无法翻译的错误,在这种情况下,将 DefaultIfEmpty 移到 ToList 之后。
  • Retunrs Empty :/
  • @Ransomware0 是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 2018-08-04
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多