0

だから私は次のコードを持っています:

  return from a in DBContext.Acts
         join artist in DBContext.Artists on a.ArtistID equals artist.ID into art
         from artist in art.DefaultIfEmpty()

         select new Shared.DO.Act
         {
             ID = a.ID,
             Name = a.Name,
             Artist = new Shared.DO.Artist
             {
                 ID = artist.ID,
                 Name = artist.Name
             },
             GigId = a.GigID
         };

これはactオブジェクトをロードし、それをlinqオブジェクトから私のドメインactオブジェクトに適応させます。

ご覧のとおり、artist と act の関係に外部結合を定義しました。

アーティストがいるかどうかに関係なく、常にその行為が欲しいので、私はこれを行いました.

行為に実際にアーティストがいる場合、これは非常にうまく機能します。

そうでない場合、コードは死にます。これが犯人です:

 Artist = new Shared.DO.Artist
          {
              ID = artist.ID,
              Name = artist.Name
          },

取り除けば大丈夫です。私が試みていることを行うことは可能ですか?

4

3 に答える 3

2
           Artist = new Shared.DO.Artist
           {
               ID = artist == null ? Guid.NewGuid() : artist.ID,
               Name = artist == null ? string.Empty : artist.Name
           }

または、Artist の Linq 表現を受け取るコンストラクターを Shared.DO.Artist に追加します。コンストラクターは null をチェックし、すべての初期化を実行できます。

于 2008-12-22T18:45:50.670 に答える
1

実際...これが私にとって最良の答えのようです....

Artist = artist == null ? null : new Shared.DO.Artist
                    {
                       ID =  artist.ID,
                       Name = artist.Name
                    },
于 2008-12-22T18:53:12.107 に答える
0

コンストラクターを呼び出して、新しいオブジェクトを作成します。Artist = を削除し、{ } を () に置き換えます。

于 2008-12-22T18:41:33.020 に答える