从Linq查询返回数组

时间:2017-02-12 19:46:30

标签: c# linq

我正在尝试转换以下代码以返回数组结果。但我无法让它发挥作用。我是Linq框架的新手。

以下是我的代码:

// GETAll api/category
public IEnumerable<Category> GetAll()
{
    nopMass db = new nopMass();

    var model = db.Categories.Where(x => x.ParentCategoryId == 0);

    return model.ToArray();
}

这就是我想要它返回

// GETAll api/category
public IEnumerable<Category> GetAll()
{
    return new Category[]
    {
        new Category
        {
            ParentCategoryId = 1,
            Name = "New Vehicles"
        },
        new Category
        {
            ParentCategoryId = 2,
            Name = "Used Vehicles"
        }
    };
}

当我访问HTML中的第一个代码时,我没有显示结果。第二个代码给出了输出。

这是Html和Jquery代码

<ul id="products" />

<script>
     var uri = 'api/category';

     $(document).ready(function () {
         // Send an AJAX request
         try
         {
             $.getJSON(uri)
                 .done(function (data) {
                     // On success, 'data' contains a list of products.
                     $.each(data, function (key, item) {
                         // Add a list item for the product.
                         $('<li>', { text: formatItem(item) }).appendTo($('#products'));
                     });
                 });
         }
         catch (e) {
             alert(e.message);
         }
});

function formatItem(item) {
    return item.Name;
}

</script>

2 个答案:

答案 0 :(得分:2)

这是你的答案重构LINQ

// GETAll api/category
public IEnumerable<Category> GetAll() {
    using(var db = new nopMass()) {

        var cats = db.Categories
                    .Where(x => x.ParentCategoryId == 0)
                    .AsEnumerable()
                    .Select(cat => new Category { 
                        ParentCategoryId = cat.ParentCategoryId, 
                        Name = cat.Name 
                     })
                    .ToArray();

        return cats;
    }
}

另外,正如评论中所提到的,确保在使用后正确处理db上下文。

答案 1 :(得分:1)

花了一些时间,但我终于开始工作了:)

    // GETAll api/category
    public IEnumerable<Category> GetAll()
    {
        nopMass db = new nopMass();

        var model = db.Categories.Where(x => x.ParentCategoryId == 0);

        Category[] cats = new Category[model.Count()];

        int index = 0;
        foreach (var cat in model)
        {
            cats[index] = new Category { ParentCategoryId = cat.ParentCategoryId, Name = cat.Name };
            index++;
        }

        return cats;
    }