从表中获取单个值的最佳方法?

时间:2015-12-10 15:01:12

标签: c# database linq asp.net-web-api

所以我有一个方法,旨在使用表中可能存在或不存在的键从表中获取单个值。在更改了一些名称后,我的方法看起来像这样。

使用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对象返回。

2 个答案:

答案 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);