Как заставить этот метод сущности LINQ To работать, когда у него есть Nullable LEFT JOIN - PullRequest
0 голосов
/ 02 сентября 2010

Вот фрагмент кода, фактически весь метод. Этот метод работает, если значение NULLAblE Foreign Key Reference имеет значение. Когда значение отсутствует, этот метод не работает. Моя идея состоит в том, чтобы получить все записи, даже если столбец ссылок равен NULL. Вот код:

 public List<PostedJob> GetPostedJobs(int startingIndex, int maximumRows)
    {
        using (var records = new CommonEvent())
        {
            var resultSet = 
                from r in records.ProjectPosts
                join rr in records.Categories on r.Category_FK equals rr.ID
                join al in records.ApplyForLimits on r.ApplyForLimit_FK 
                                         equals al.Id
                //from uImage in 
                // records.UploadedFiles
                //  .Where(uu=>uu.Id == r.UploadedFileInfo_FK 
               //       || r.UploadedFileInfo_FK == null).DefaultIfEmpty()
                join a in records.UploadedFiles on r.UploadedFileInfo_FK 
                                         equals a.Id into something
                from uImage in something.DefaultIfEmpty()
                orderby r.PostId
                select new Models.PostedJob
                {
                    ApplyForLimitName = al.Name,
                    ProjectTitle = r.ProjectTitle,
                    ProjectDescription = r.ProjectDescription,
                    ProjectSummaryDescription = r.ProjectSummaryDescription,
                    SkillsRequirements = r.SkillsRequirements,
                    CategoryName = rr.CategoryName,
                     UploadedFileID = (int) r.UploadedFileInfo_FK,

                        UploadedFileInformation = uImage == null ?
                            new Models.UploadedFile
                            {
                                fileContents = new  byte [] { (byte) 0},
                                FileExtension = string.Empty,
                                FileName = string.Empty,
                                FileSize = 0,
                                UploadedDate = DateTime.Now
                            } 
                        :
                            new Models.UploadedFile
                            {
                                fileContents = uImage.FileContents,
                                FileExtension = uImage.FileExtension,
                                FileName = uImage.FileName,
                                FileSize = uImage.FileSize,
                                UploadedDate = DateTime.Now
                            }
                };



            return resultSet.Skip(startingIndex).Take(maximumRows).ToList();


        }

Спасибо за любые предложения или идеи о том, как действовать. Я использую .NET 4.0

1 Ответ

1 голос
/ 02 сентября 2010

Разве вы не можете использовать сгенерированные для вас Ассоциации?

var a = records
.ProjectPosts
.Select(
  projectPost =>
   new Models.PostedJob()
   {
     ProjectTitle = projectPost.ProjectTitle,
     CategoryName = projectPost.Category.CategoryName,
   });

Что-то в этом роде?

РЕДАКТИРОВАТЬ: И просто добавить нулевые проверки, когда FK может потерпеть неудачу

пример:

CategoryName = projectPost.Category == null ? String.Empty : projectPost.Category.CategoryName,
...