如何更改查询以使结果不等于 NULL
How can I change the query to make result not equal to NULL
我对项目中的实体使用 LINQ。
在某些时候,我从数据库中获取数据:
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 以及属性 Id 和 FieldValue 为零和空?
试试这个:
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"};
当 Linq 查询return null.
顺便说一句,如果您使用的是 C# 7,您还可以让 Linq 查询创建一个 Tuple 而不是匿名类型,如果您需要 return 在函数或其他东西中创建它可能会更容易像那样:
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");
您可以使用 documentation 中描述的 DefaultIfEmpty(defaultVal)
方法。
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
我对项目中的实体使用 LINQ。 在某些时候,我从数据库中获取数据:
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 以及属性 Id 和 FieldValue 为零和空?
试试这个:
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"};
当 Linq 查询return null.
顺便说一句,如果您使用的是 C# 7,您还可以让 Linq 查询创建一个 Tuple 而不是匿名类型,如果您需要 return 在函数或其他东西中创建它可能会更容易像那样:
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");
您可以使用 documentation 中描述的 DefaultIfEmpty(defaultVal)
方法。
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