0
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();

3番目のバリアントを使用する方法はありますか?

4

2 に答える 2

0

TestPartまたはTestのいずれかで暗黙的な変換を提供すると、ここでうまくいくはずです。Testは単にTestPartを拡張しているだけなので、TestPartからTestを派生させることも検討してください。これにより、暗黙的な変換を定義する必要はありません。

于 2010-06-10T10:26:07.083 に答える
0

Testクラスがデータの書き込みに使用されていない場合は、dbmlの主キーを削除することでオブジェクトトラッキングを無効にできます。Testのインスタンスが変更について追跡されていない場合は、クエリで好きなだけ更新することができます。

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

部分的にロードできるTestクラスと、書き戻すことができるTestクラスが必要だとします。テストテーブルをデザイナに2回ドロップし、そのうちの1つから主キーを削除するだけです。

于 2010-06-10T17:33:29.830 に答える