2015-10-12 4 views
-4

У меня возникла проблема с преобразованием результата linq в объект.Результат LINQ для инициализатора объекта

У меня есть класс под названием Plant и база данных, которая содержит информацию об этом (например, имя, латинское название, местообитания и т. Д.). Я хочу создать новый объект из выполненного запроса и отправить его в другую часть приложения. Так что я баловаться с этим кодом:

using (DataClassesDataContext dc = new DataClassesDataContext()) 
{ 

    var sPlant = (from p in dc.Plants where p.Name == plantName select new Plant 
    { 
     Name = p.Name, 
     LatinName = p.LatinName, 
     Habitat = p.Habitat, 
     LeafHarvesting = p.LeafHarvesting, 
     FlowerHarvesting = p.FlowerHarvesting, 
     FruitHarvesting = p.FruitHarvesting, 
     RootHarvesting = p.RootHarvesting, 
     Morphology = p.Morphology, 
     Pharmacology = p.Pharmacology, 
     Img = p.Img, 
     GPSCoordinates = p.GPSCoordinates 
    } 
); 

Но она не преобразует результат в новый Plant объекта.

+1

Что происходит? Вы получили сообщение об ошибке? Каков результат? – TomDoesCode

+5

Это 'select', поэтому я предполагаю, что это создает' IEnumerable ' или что-то в этом роде. Добавьте 'First()'. –

+0

не может конвертировать из 'System.Linq.IQueryable ' в 'Zielnik.Plant' – vortex

ответ

1

Как кажется, Plant не является частью хранилища данных, вам необходимо вернуть объект, который может обрабатывать Linq to SQL, чтобы затем создать экземпляр Plant локально ,

Начните с запроса списка анонимных объектов, содержащих нужные вам свойства, а затем создайте только Plant. Добавить First() или FirstOrDefault() в конце, чтобы получить только один Plant:

using (DataClassesDataContext dc = new DataClassesDataContext()) 
{ 
    var sPlant = (from p in dc.Plants where p.Name == plantName 
     select new { 
      Name = p.Name, 
      LatinName = p.LatinName, 
      Habitat = p.Habitat, 
      LeafHarvesting = p.LeafHarvesting, 
      FlowerHarvesting = p.FlowerHarvesting, 
      FruitHarvesting = p.FruitHarvesting, 
      RootHarvesting = p.RootHarvesting, 
      Morphology = p.Morphology, 
      Pharmacology = p.Pharmacology, 
      Img = p.Img, 
      GPSCoordinates = p.GPSCoordinates 
     }).AsEnumerable().Select(p => new Plant 
     { 
      Name = p.Name, 
      LatinName = p.LatinName, 
      Habitat = p.Habitat, 
      LeafHarvesting = p.LeafHarvesting, 
      FlowerHarvesting = p.FlowerHarvesting, 
      FruitHarvesting = p.FruitHarvesting, 
      RootHarvesting = p.RootHarvesting, 
      Morphology = p.Morphology, 
      Pharmacology = p.Pharmacology, 
      Img = p.Img, 
      GPSCoordinates = p.GPSCoordinates 
     }).First(); 
} 
+0

Необработанное исключение типа «System.NotSupportedException» произошло в System.Data.Linq.dll – vortex

+0

явного типа единицы строительства «Zielnik. Завод "в запросе не допускается. – vortex

+0

он приводит к тому же исключению – vortex

1

Используйте функцию First или FirstOrDefault для получения объекта. См. here, чтобы получить разницу.

0

Если ваш запрос должен возвращать несколько результатов, используйте .TOList(). Если вы хотите взять только первую строку, используйте FirstOrDefault()

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