我一直在根据www.asp.net上的指南探索WEB API,在尝试从表格中过滤列时遇到了问题。
我的代码就是这样:
// GET api/Admin
public IEnumerable<Product> GetProducts(testvar = "")
{
IQueryable<Product> productString = db.Products;
if (testvar != "")
{
productString = productString.ToList().Select(i => new Product
{
Name = i.Name
}).AsQueryable();
}
return productString;
}
我想要做的就是从我的JSON的Product表中检索Name列。但是,而不是像以下那样:
[{"Name":"Hammer"}] or [{"$id":"1","Name":"Hammer"}]
我得到了:
[{"$id":"1","Id":0,"Name":"Hammer","Price":0.0,"ActualCost":0.0}]
Price和ActualCost值通常为16.99和20.00,但它们不是删除它们,而是返回0.相同的ID。
是否有一种简单的方法可以阻止它返回Id,Price和ActualCost?也许我错过了一些非常简单的东西,但是下面两个链接是我最接近找到可能有效的东西。
The entity cannot be constructed in a LINQ to Entities query
根据我一直在使用的指南(http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part-1)我正在使用Orders,Projects和OrderDetails表在MVC 4项目中工作。
由于
答案 0 :(得分:1)
您仍然返回完整的Product
实体类型,因此即使您投射到新Product
的集合,未初始化的属性仍将具有其默认值({{1}为0 })。
您应该创建一个新类型,它只包含您希望公开的属性(例如int
)并返回此类型的集合。
或者,如果您的服务支持$ select查询选项,则客户端可以执行投影。
答案 1 :(得分:0)
我明白了。我刚刚将Product分配给一个新变量并对其进行了select调用,并且它运行良好。
所以现在而不是:
productString = productString.ToList().Select(i => new Product
{
Name = i.Name
}).AsQueryable();
我有
var productInfos =
from i in productString
select new { i.Name };
newVariable.Add(productInfos);
然后我返回newVariable,它是一个对象列表而不是IEnumerable of Products。