【问题标题】:LinQ Grouping records with null valuesLinQ 对具有空值的记录进行分组
【发布时间】:2017-01-06 06:19:33
【问题描述】:

我有一张表,需要通过对 Field1 和 Field2 进行分组来获取列表

public class Journal
{
    public int ID {get; set;}
    public string DateField { get; set; }
    public string Notes { get; set; }
    public int Field1 { get; set; }
    public string Field2 { get; set; }
}

首先我按Field2(字符串)过滤数据,并在按两个字段(Field1和Field2)分组时

MyList = DBContext.Journals.Where(f=>f.Field2.StartsWith(someParam))
                           .GroupBy(g => new { g.Field1, g.Field2 })
                           .Select(n=> n.Key.Field1).ToList();

如果Field1和Field2不为null,一切正常,但是如果它们为null如何解决问题,您能帮忙吗?

如果有空值,我得到一个异常:

“转换为值类型 'System.Int32' 失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可为空的类型。”

【问题讨论】:

  • Field1 不能为空——它是一个值类型。
  • Journal 中使用public int? Field1 { get; set; } ;)。
  • MyList 呢?列表 MyList = 新列表(); ?
  • @Songeila 您是否尝试过进行空检查?比如:DBContext.Journals.Where(f => ! (f.Field2 == null || f.Field2.Equals(string.Empty) ) && f.Field2.StartsWith(someParam))
  • 对我来说最大的问题是关于 int 类型的字段...字符串是可以的

标签: linq code-first


【解决方案1】:

你有没有尝试过类似的东西:

MyList = DBContext.Journals.Where(f=> !String.IsNullOrEmpty(f.Field1) && f.Field2 != null && (f.Field2.StartsWith(someParam)))
                           .GroupBy(g => new { g.Field1, g.Field2 })
                           .Select(n=> n.Key.Field1).ToList();

【讨论】:

  • int 字段 2。表达式的结果始终为“真”,因为“int”类型的值永远不会等于“int?”类型的“null”。但总是正确的,为什么我得到一个关于 null 的异常......如何在实体框架中解决这个问题,而不是在服务器中通过过滤可空记录(我也需要它们,即使它们为空)
猜你喜欢
  • 2013-07-28
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
相关资源
最近更新 更多