如何仅删除回复SQUARE BRACKET FROM result
- 回复:[]
public HttpResponseMessage GetDetail(int id)
{
var result = new Dictionary<string, object>();
EDetail EDetailobj = db.EDetails.FirstOrDefault(P => P.DetailID == id);
if (EDetailobj != null)
{
result.Add("Status", "ok");
var responseResult = db.EDetails
.Where(x => x.DetailID == id)
.Select(x => new
{
x.DetailID ,
x.DetailName,
x.Qty,
x.Price,
});
result.Add("Response", responseResult);
return Request.CreateResponse(HttpStatusCode.OK, result);
}
else
{
result.Add("Status", "failure");
return Request.CreateResponse(result);
}
}
{
"status": "ok",
"response": [
{
"detailID": 1,
"detailName": "whiteshirt",
"qty": 12,
"price": 21.0,
}
]
}
答案 0 :(得分:2)
在您的数据库查询中,您将返回与查询x.DetailID == id
匹配的结果的列表。是的,可能只有一个结果,但这并没有改变Where
总是返回集合而不是单个对象的事实。
所以,现在作为结果的一部分,您将返回包含单个项目的列表。这个列表完全按照你的看法被序列化为JSON - 作为包含单个对象的JSON数组(方括号)。
如果你想避免这种情况,请不要返回一个集合 - 返回一个对象:
var responseResult = db.EDetails
.Where(x => x.DetailID == id)
.Select(x => new
{
x.DetailID ,
x.DetailName,
x.Qty,
x.Price,
})
.SingleOrDefault();
答案 1 :(得分:0)
只需使用First()或FirstOrDefault()
即可 var responseResult = db.EDetails
.Where(x => x.DetailID == id)
.Select(x => new
{
x.DetailID ,
x.DetailName,
x.Qty,
x.Price,
}).FirstOrDefault();
在选择Single,SingleOrDefault,First和FirstOrDefault时,您应该注意以下几点:
如果要在结果集包含许多记录时抛出异常,请使用Single或SingleOrDefault。
如果希望在结果集不包含记录时返回默认值,请使用SingleOrDefault。
如果您总是想要一条记录,无论结果集包含什么,请使用First或FirstOrDefault。
如果结果集不包含记录,则需要默认值时
与SingleOrDefault相比,FirstOrDefault通常执行得更快,因为它们会迭代集合直到找到第一个匹配。而SingleOrDefault迭代整个集合以找到一个匹配。