2017-02-12 5 views
1

Я пытаюсь преобразовать следующий код, чтобы вернуть результат массива. Но я не могу заставить его работать. Я довольно новичок в инфраструктуре Linq.Return Array from Linq Query

Вот код у меня есть:

// 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> 
+0

Запрашиваемый результат является лишь примером. Когда я отлаживаю строку, я вижу возвращаемые значения, но она не отображается на лицевой стороне :( – Orion

+2

Если mopMass - это DBC-контекст, вы должны действительно избавиться от него, когда вы закончите с ним. –

+0

Кажется, что .done в JQuery не выполняется – Orion

ответ

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 правильно утилизирован после использования.

+0

Я получаю следующую ошибку: «Объект или сложный тип« WebAPI.Models.Category »не может быть сконструирован в запросе LINQ to Entities.« Мне кажется, мне нужно создать отдельный объект Category, который не является частью объекта DBContext.Это будет включать в себя больше кодирования, чем мой ответ ниже? – Orion

+0

@Orion вы можете добавить 'AsEnumerable',' ToList' или одно из других выражений, которое будет перечислять коллекцию перед выполнением 'Select' – Nkosi

+1

@Orion проверьте обновленный ответ. – Nkosi

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; 
    }