Внешние соединения и Линк - PullRequest
0 голосов
/ 22 декабря 2008

Итак, у меня есть следующий код:

  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
         };

Это загружает объект действия и адаптирует его из объекта linq к моему объекту действия домена.

Как вы видите, я определил внешнее соединение художника, чтобы действовать в отношениях.

Я сделал это, потому что я всегда хочу акт, независимо от того, есть ли у него художник.

Это действительно хорошо работает, если в акте действительно есть художник.

Если это не так, код умирает. Это виновник:

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

Если я уберу его, это нормально. Можно ли сделать то, что я пытаюсь?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2008
           Artist = new Shared.DO.Artist
           {
               ID = artist == null ? Guid.NewGuid() : artist.ID,
               Name = artist == null ? string.Empty : artist.Name
           }

В качестве альтернативы, добавьте конструктор в Shared.DO.Artist, который принимает Linq-представление Artist. Конструктор может проверить на нулевое значение и выполнить всю инициализацию.

1 голос
/ 22 декабря 2008

На самом деле ... это кажется лучшим ответом для меня ....

Artist = artist == null ? null : new Shared.DO.Artist
                    {
                       ID =  artist.ID,
                       Name = artist.Name
                    },
0 голосов
/ 22 декабря 2008

Вы хотите создать новый объект, вызвав конструктор. Удалить Artist = и заменить {} на ().

...