Как я могу загрузить часть класса с помощью linq в sql без анонимного класса или дополнительного класса? - PullRequest
0 голосов
/ 10 июня 2010
class Test { 
  int Id{get;set;} 
  string Name {get;set;} 
  string Description {get;set;}
}

//1)ok
context.Tests.Select(t => new {t.Id, t.Name}).ToList().Select(t => new Test{Id = t.Id,
Name = t.Name});

//2)ok
class TestPart{
  int Id{get;set;}
  string Name {get;set;}
}
context.Tests.Select(t => new TestPart{Id = t.Id,
Name = t.Name}).ToList().Select(t => new Test{Id = t.Id,
Name = t.Name});

//3)error Explicit construction of entity type 'Test' in query is not allowed.
context.Tests.Select(t => new Test{Id = t.Id,
Name = t.Name}).ToList();

Есть ли способ использовать третий вариант?

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

Если ваш тестовый класс не используется для записи данных, вы можете отключить отслеживание объекта, удалив первичный ключ в dbml.Если экземпляры Test не отслеживаются на предмет изменений, вы можете добавлять в запрос столько, сколько захотите.

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/1ce25da3-44c6-407d-8395-4c146930004b

Предположим, вы хотите получитьТестовый класс, который вы можете частично загрузить, и тестовый класс, с которым вы можете написать обратно.Просто дважды поместите тестовую таблицу в конструктор и удалите первичный ключ из одного из них.

0 голосов
/ 10 июня 2010

Обеспечение неявного преобразования в TestPart или Test должно помочь.Вы также можете рассмотреть возможность получения Test из TestPart, поскольку Test просто расширяет TestPart.Таким образом, вам не нужно определять неявное преобразование.

...