繁体   English   中英

使用IQueryable select过滤列

[英]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? 也许我缺少了一些非常简单的东西,但是下面的两个链接是我最近找到可能有用的东西的地方。

IQueryable 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项目中工作。

谢谢

您仍将返回完整的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM