如何从查询字符串web api c#

时间:2018-02-01 11:23:48

标签: c# json entity-framework-6 asp.net-web-api2

如何仅删除回复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,
    }
  ]
}

2 个答案:

答案 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迭代整个集合以找到一个匹配。