代码之家  ›  专栏  ›  技术社区  ›  Michael

如何更改查询以使结果不等于NULL

  •  0
  • Michael  · 技术社区  · 7 年前

     int vectorLayerId = 5;
     int pointFeatId = 10;
    
     var RealValue = x.VectorLayer_FieldsValue
                      .Where(f=>f.FeatIdPointFeatures == vectorLayerId && f.VectorLayerFieldsId == pointFeatId)
                      .Select(v => new { v.Id, v.FieldValue })
                      .FirstOrDefault()
    

    如果在我的数据库中不存在与筛选器关联的记录,则RealValue对象设置为NULL。 而我需要RealValue为所有属性Id为零,如果与筛选器关联的记录不存在,则FieldValue属性为空。

    如何更改上面的查询,使RealValue不为NULL,properties Id和FieldValue为零并为空?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Bas    7 年前

    试试这个:

    int vectorLayerId = 5;
    int pointFeatId = 10;
    
     var RealValue = x.VectorLayer_FieldsValue
                      .Where(f=>f.FeatIdPointFeatures == vectorLayerId && f.VectorLayerFieldsId == pointFeatId)
                      .Select(v => new { v.Id, v.FieldValue })
                      .FirstOrDefault() ?? new { Id = 0, FieldValue = "0"};
    

    顺便说一句,如果您使用的是C#7,还可以让Linq查询创建一个元组,而不是匿名类型,如果您需要在函数或类似函数中返回元组,这可能会更容易:

    int vectorLayerId = 5;
    int pointFeatId = 10;
    
     var RealValue = x.VectorLayer_FieldsValue
                      .Where(f=>f.FeatIdPointFeatures == vectorLayerId && f.VectorLayerFieldsId == pointFeatId)
                      .Select(v => (v.Id, v.FieldValue))
                      .FirstOrDefault() ?? (Id: 0, FieldValue: "0");
    
        2
  •  1
  •   J. Coenen    7 年前

    DefaultIfEmpty(defaultVal) 方法如中所述 documentation

     int vectorLayerId = 5;
     int pointFeatId = 10;
    
     var RealValue = x.VectorLayer_FieldsValue
                      .Where(f=>f.FeatIdPointFeatures == vectorLayerId && f.VectorLayerFieldsId == pointFeatId)
                      .Select(v => new { v.Id, v.FieldValue })
                      .DefaultIfEmpty(new { 0, "" }).Single(); // assuming that FieldValue is a string