質問

LINQにも亜音声と合理的に新しいことが新しいので、私はちょうど少しアプリを一緒に置くことを試みています。

テンプレートがすべて並べ替えて大丈夫ですが、このLINQステートメントでは少しの問題に遭遇しました(少し単純化されている、Real Statementは他のどのような問題には影響しません。私はそれらを簡潔にしました):

var addresses = from address in Database.Addresses.All()
                           select new Address()
                               {
                                   MyNestedType = new NestedType()
                                       {
                                           Field1 = address.ADDR1
                                       }
                               };
.

この文を実行すると、「System.String」から 'NestedType'へのエラーが無効になっています。の結果を列挙しようとします。

私はおそらく明らかだのを見下ろすのですが、私はそのような変換を要求する場所がわかりません。

field1 address.addr1 の両方は文字列です。

私が間違っていることは何ですか?

編集

これをもう一度見て、より多くの情報を提供するための努力で、私はSimpleRepositoryとSQLiteデータベースを使用して小さな完全な例を作成しました。 SimpleRepositoryを使用すると、Error I Getが異なります(シーケンスには要素が含まれていません)が同じです。これが完全なコードです:

 public class DatabaseAddress
 {
     public int Id { get; set; }
     public string Address1 { get; set; }
 }

 public class Address
 {
     public NestedType MyNestedType;
 }

 public class NestedType
 {
     public string Field1 { get; set; }
 }

 static class Program
 {
    [STAThread]
    static void Main()
    {
         var repo = new SimpleRepository("Db", SimpleRepositoryOptions.RunMigrations);
         DatabaseAddress address1 = new DatabaseAddress();
         address1.Address1 = "Test";
         repo.Add(address1);
         var all = repo.All<DatabaseAddress>();
         var addresses = from address in repo.All<DatabaseAddress>()
                         select new Address { MyNestedType = new NestedType { Field1 = address.Address1 } };
    }
 }
.

この例では、allにはデータベースに追加されたオブジェクトが含まれていますが、addressesは "Sequenceに要素が含まれていません"を返します。

select文の具体的な型の代わりに匿名型を使用する場合は機能します。

ここで私の知る限りでは明らかにギャップがあります。あらゆる助けがあります。

役に立ちましたか?

解決

Tolist()を呼び出す必要があります。そうしないと、サブソンプロバイダーはMyNestedTypeで何かをしようとし、データベースには存在しません。

var addresses = from address in repo.All<DatabaseAddress>().ToList()
                        select new Address { MyNestedType = new NestedType { Field1 = address.Address1 } };
.

アップデート:後でTolistを呼び出す場合は、それも機能します。:

addresses.ToList().ForEach(address => Console.WriteLine("Address.MyNestedType.Field1 = {0}", address.MyNestedType.Field1));
.

サブソンクエリプロバイダには、匿名型のために機能するため、匿名の種類のためにバグがあると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top