2

我一直在根据 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?也许我错过了一些非常简单的东西,但下面的两个链接是我找到的最接近的链接。

可查询的 C# 选择

无法在 LINQ to Entities 查询中构造实体

根据我一直在使用的指南(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 项目。

谢谢

4

2 回答 2

1

您仍在返回完整的Product实体类型,因此即使您正在投影到 new 的集合Product,未初始化的属性仍将具有其默认值(0 表示int)。

您应该创建一个新类型,它只包含ProductInfo您希望公开的属性(例如)并返回此类型的集合。

或者,如果您的服务支持 $select 查询选项,则客户端可以执行预测。

于 2013-04-27T17:50:34.893 回答
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。

于 2013-04-28T17:44:38.943 回答