我有一个Web API方法,它将以如下形式返回值
[ { “TransactionId”:“AJ978962017”, “总计”:1.17 }, { “TransactionId”:“AJ978972017”, “总计”:8.9 } ]
我想要没有外部数组的输出如下
{ “TransactionId”:“AJ978962017”, “总计”:1.17 }, { “TransactionId”:“AJ978972017”, “总计”:8.9 }
请建议如何实现所需的输出。
代码
[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
using (WebAPIEntities WE = new WebAPIEntities())
{
var emp = WE.TrxDetails.Where(E => E.EmpId == Id).ToList();
return emp;
}
}
答案 0 :(得分:0)
Linq扩展方法Where(...)
返回IEnumerable<T>
。列表中的过滤器在哪里,因此将返回列表(IEnumerable
)。然后,您正在调用ToList()
将其转换为List<T>
。当您序列化为JSON时,IEnumerable<T>
,List<T>
和T[]
都会(正确地)表示为JSON数组:[{...},{...},{。 ..}]
[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
using (WebAPIEntities WE = new WebAPIEntities())
{
var emp = WE.TrxDetails.Where(E => E.EmpId == Id).ToList();
return emp;
}
}
如果您只想要一个项目,有几种方法可以使用Linq:
Single(...)
- 只要该值在列表中是唯一的,就会返回一个值。如果找不到它会抛出错误。
SingleOrDefault(...)
- 这将返回一个值,如果未找到则返回null。
First(...)
- 这将返回第一个匹配值,如果没有,则抛出错误。
FirstOrDefault(...)
- 这将返回第一个匹配值,如果没有,则返回null。
Last(...)
- 这将返回最后一个匹配值,如果没有,则抛出错误。
LastOrDefault(...)
- 这将返回最后一个匹配值,如果没有,则返回null。
上面返回的异常类型是:InvalidOperationException
我假设FirstOrDefault(...)
足以满足你的情况:
[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
using (WebAPIEntities WE = new WebAPIEntities())
{
return WE.TrxDetails.FirstOrDefault(E => E.EmpId == Id);
}
}