2010-12-14 3 views
0

Я пытаюсь использовать Linq для создания объекта, который сам содержит 2 объекта данных. Из выражения Linq я пытаюсь настроить объекты напрямую, а не иметь функцию inbetween в содержащем классе.Linq для многих объектов с использованием MVC

Содержащий класс выглядит следующим образом:

public class SupplierCategories 
{ 

    public category _category; 
    public category_sub _category_sub; 
    private bool _IsActive; 
    private int? _SupplierID; 

    public SupplierCategories() 
    { 

    } 

    public bool IsActive 
    { 
     get 
     { 
      return _IsActive; 
     } 
     set 
     { 
      _IsActive = value; 
     } 
    } 

    public int? SupplierID 
    { 
     get 
     { 
      return _SupplierID; 
     } 
     set 
     { 
      _SupplierID = value; 
      if (_SupplierID != null) // The county is active if there is a supplier ID matching 
      { 
       _IsActive = true; 
      } 
     } 

    } 
} 

Примечание: категория и category_sub объекты все настройки через Entity Framework.

Мое выражение ссылка имеет 2 таблицы и выглядит следующим образом:

public IEnumerable<SupplierCategories> GetAllOrdered() 
    { 
     IEnumerable<SupplierCategories> areaList; 

     var results = from cat in dbContext.categories 
         join sub in dbContext.category_sub on cat.id equals sub.categoryid 
         orderby cat.id ascending, sub.name ascending 
         select new SupplierCategories 
         { 
          _category = { new category { cat.id, cat.name } }, 
          _category_sub = { new category_sub { sub.id, sub.categoryid, sub.name } } 
         }; 

     areaList = results.ToList(); 

     return areaList; 
    } 

Надеюсь, вы можете увидеть, что я пытаюсь создать «_category» и «_category_sub» объекты непосредственно.

Ошибки я получаю:

Ошибка 5 Невозможно инициализировать тип 'Essential_Collections.Models.category' с коллекцией инициализаторе, потому что он не реализует 'System.Collections.IEnumerable' D : \ Сайты \ Эфирные Коллекции \ разработка \ сборка \ Эфирные Коллекции \ Models \ SupplierCategories \ SupplierCategoriesRepository.cs 51 37 Эфирные Коллекции

Любых решений или, возможно, другие подходы, будут с благодарностью приняты

ответ

1

Попробуйте удалить лишние скобки таким образом:

public IEnumerable<SupplierCategories> GetAllOrdered() 
{ 
    IEnumerable<SupplierCategories> areaList; 

    var results = from cat in dbContext.categories 
        join sub in dbContext.category_sub on cat.id equals sub.categoryid 
        orderby cat.id ascending, sub.name ascending 
        select new SupplierCategories() 
        { 
         _category = cat, 
         _category_sub = sub 
        }; 

    areaList = results.ToList(); 

    return areaList; 
} 
+0

большое спасибо, работает отлично. Однако, если бы я хотел создать объекты, которые непосредственно не сопоставлялись с таблицами, я мог бы сделать что-то вроде выше, определяя индивидуальные значения? – Billyhomebase

+0

@Billyhomebase: @BFree подчеркивает, где вы ошибетесь в своих конструкторах объектов для категории и category_sub. Если у вас есть соответствующий конструктор или вы правильно идентифицируете свойства, которые вы инициализируете, вы можете создавать новые объекты для них. – Lazarus

+0

Если это «отлично работает», я бы предложил принять его в качестве ответа. –

1

Вы пропустили круглые скобки при вызове конструктора:

select new SupplierCategories() 
{ 
0
public IEnumerable<SupplierCategories> GetAllOrdered() 
{ 
    IEnumerable<SupplierCategories> areaList; 

    var results = from cat in dbContext.categories 
        join sub in dbContext.category_sub on cat.id equals sub.categoryid 
        orderby cat.id ascending, sub.name ascending 
        select new SupplierCategories 
        { 
         _category = new category { cat.id, cat.name } , //removed the curly braces here 
         _category_sub = new category_sub { sub.id, sub.categoryid, sub.name } //removed the curly braces here 
        }; 

    areaList = results.ToList(); 

    return areaList; 
} 

Ошибки вы получаете из-за эти фигурные скобки я удален , Это еще не компилируется, потому что вам нужно явно сформулировать, какое свойство вы устанавливаете в инициализаторе объекта:

_category = new category { ID = cat.id, Name = cat.name } 

или если ваш класс категории имеет перегрузки конструктора, который принимает эти аргументы, а затем передавать их.