[英]Using IQueryable select to filter columns
我一直在基于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的“产品”表中检索“名称”列。 但是,与其得到类似的信息:
[{"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,价格和ActualCost? 也许我缺少了一些非常简单的东西,但是下面的两个链接是我最近找到可能有用的东西的地方。
按照我一直在使用的指南( 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项目中工作。
谢谢
您仍将返回完整的Product
实体类型,因此,即使投影到新Product
的集合,未初始化的属性仍将具有其默认值( int
为0)。
您应该创建一个仅包含您希望公开的属性(例如ProductInfo
)的新类型,并返回此类型的集合。
或者,如果您的服务支持$ select查询选项,则客户端可以执行投影。
我想到了。 我只是将Product分配给一个新变量,并对其进行了选择调用,它运行良好。
所以现在代替:
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.