所以我有一个方法,旨在使用表中可能存在或不存在的键从表中获取单个值。在更改了一些名称后,我的方法看起来像这样。
使用Entity Framework和Linq
public IHttpActionResult GetBool(int Id)
{
Entity e = db.Entity.FirstOrDefault(x => x.Id== Id);
if (e == null) return NotFound();
return Ok(e.BoolValue);
}
此调用似乎没有必要,只需将整个实体拉到一个值即可。如何错误检查可能不存在的实体,同时只抓取相关列?
我的解决方案就像
bool value =
(from e in db.Entity
where e.ID == Id
select e.BoolValue).ToList().ElementAtOrDefault(0);
if(value== null) return NotFound();
return Ok(value);
这是查询的最佳方式吗?
解决方案:
回答:
return db.Entity.Where(x => x.Id== Id)
.Select(x => Ok(x.BoolValue))
.DefaultIfEmpty(NotFound())
.First();
出于个人需要,我修改了它以作为JSON对象返回。
答案 0 :(得分:4)
您可以选择此列并指定默认值:
return db.Entity.Where(x => x.Id== Id)
.Select(x => Ok(x.BoolValue))
.DefaultIfEmpty(NotFound())
.First();
但是,选择单个记录并返回其中一个列并不是非常昂贵。如果它导致性能问题,您最好使用一个查询获取多个记录,而不是始终在循环中执行GetBool
。
答案 1 :(得分:1)
var value = (from e in db.Entity
where e.ID == Id
select e.BoolValue).SingleOrDefault();
if(value == null)
return NotFound();
else
return Ok(value);