Запрос LINQ с двумя связанными объектами - PullRequest
0 голосов
/ 14 марта 2012

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

        var result = from i in _dbContext.Users
                     orderby i.aspnet_User.aspnet_Membership.CreateDate
                     select new ITW2012Mobile.Models.BusinessLogic.PreReg()
                     {
                         UserID = i.ID,
                         Company = i.Company,
                         FirstName = i.FirstName,
                         LastName = i.LastName,
                         IsUsed = i.IsUsed,
                         Title = i.Title,
                         Email = ((i.IsUsed) ? i.aspnet_User.aspnet_Membership.Email : i.PreRegEmail.Email)
                     };
        var q = result.ToList();

поэтому, когда флаг isUsed == true, нам нужно получить электронное письмо от членства, в противном случае от PreRegEmail. Но этот код не работает, получите «Не удается разрешить конфликт сопоставления для столбца 7 в операторе SELECT». Почему и как решить?

1 Ответ

1 голос
/ 14 марта 2012

Сообщение error фактически приходит с сервера sql.Нельзя объединять два столбца с разным сопоставлением в один.Я бы порекомендовал использовать linq-to-entities, чтобы выделить их в отдельных свойствах, а затем linq-to-objects, чтобы создать свойство электронной почты следующим образом:

var result = from i in _dbContext.Users
             orderby i.aspnet_User.aspnet_Membership.CreateDate
             select new 
             {
               UserID = i.ID,
               Company = i.Company,
               FirstName = i.FirstName,
               LastName = i.LastName,
               IsUsed = i.IsUsed,
               Title = i.Title,
               AspEmail = i.aspnet_User.aspnet_Membership.Email,
               PreRegEmail = i.PreRegEmail.Email,
             };   

var q = from i in result.AsEnumerable()
        select new ITW2012Mobile.Models.BusinessLogic.PreReg()
        {
          UserID = i.ID,
          Company = i.Company,
          FirstName = i.FirstName,
          LastName = i.LastName,
          IsUsed = i.IsUsed,
          Title = i.Title,
          Email = i.IsUsed ? i.AspEmail  : i.PreRegEmail,
        };

var final = q.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...