2016-02-10 2 views
1

Я только начал изучать Linq, и я пытаюсь сопоставить таблицу базы данных с классом, но я не могу заставить его работать с частным конструктором.Как я могу использовать iQueryable в классе с частным конструктором?

Мой код:

namespace LinqTest 
{ 
    using System.Collections.Generic; 
    using System.Data.Linq; 
    using System.Data.Linq.Mapping; 
    using System.Linq; 

    [Table(Name = "tblCity")] 
    public class City 
    { 
     private City() 
     { 
     } 

     [Column(IsPrimaryKey = true, Name = "CityId")] 
     public int Id { get; private set; } 

     [Column(Name = "CityName")] 
     public string Name { get; private set; } 

     public static List<City> GetList() 
     { 
      var dataContext = new DataContext(Database.ConnectionString()); 
      var cities = dataContext.GetTable<City>(); 

      var iQueryable = 
       from city in cities 
       select city; 

      return iQueryable.ToList(); 
     } 
    } 
} 

Я также попытался отображение на новый экземпляр:

var list = new List<City>(); 

      foreach (var iCity in iQueryable) 
      { 

       var city = new City 
       { 
        Id = iCity.Id, 
        Name = iCity.Name 
       }; 

       list.Add(city); 
      } 

      return list; 

Что я могу сделать, чтобы сделать эту работу? Я открыт для альтернативных методов. Thanks

ответ

1

Вы не можете использовать iqueryable объект в foreach. Потому что это всего лишь запрос. Вы должны получить объекты с ToList(). Пробуйте это:

var list = new List<City>(); 

      foreach (var iCity in iQueryable.ToList())// return iqueryable to list 
      { 

       var city = new City 
       { 
        Id = iCity.Id, 
        Name = iCity.Name 
       }; 

       list.Add(city); 
      } 

      return list; 

Или Вы можете найти автопарк. Один пример here

+0

Спасибо, это огромная помощь. Есть ли способ избежать второго отображения в цикле foreach? – user2078938

+0

Будьте более ясны пожалуйста. Избегать второго отображения - это средний дублирующий город? –

+0

Если вам нужно избегать дублирования, посмотрите этот [пример] (http://stackoverflow.com/questions/1606679/remove-duplicates-in-the-list-using-linq). –

Смежные вопросы