如何使这个LINQ To实体方法在具有Nullable LEFT JOIN时工作

时间:2010-09-01 20:54:59

标签: linq entity

这是代码片段,实际上是整个方法。当NULLAblE外键引用具有值时,此方法适用于f,ine。当值不存在时,则此方法不起作用。我的想法是即使引用列为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 个答案:

答案 0 :(得分:1)

您是否可以使用为您生成的关联?

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,