C# 如何将左侧外部联接sql查询转换为实体框架5.0?

C# 如何将左侧外部联接sql查询转换为实体框架5.0?,c#,mysql,asp.net,entity-framework,C#,Mysql,Asp.net,Entity Framework,使用正确命名的实体和导航属性,它将如下所示: select tblBlog.*,tblBlogMedia.BlogPicturePath from tblBlog left outer join tblBlogMedia on tblBlog.id = tblBlogMedia.BlogId where tblBlogMedia.id=(select max(id) from tblBlogMedia where BlogId='2') 这就是我想要的完美工作方式,我在ForEach循环体中

使用正确命名的实体和导航属性,它将如下所示:

select tblBlog.*,tblBlogMedia.BlogPicturePath from tblBlog left outer join 
tblBlogMedia on tblBlog.id = tblBlogMedia.BlogId
where tblBlogMedia.id=(select max(id) from tblBlogMedia where BlogId='2')

这就是我想要的完美工作方式,我在ForEach循环体中编写此代码,然后在sb中传递q的值

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EfDbFirstTest
{
    public class Blog
    {
        public int Id { get; set; }
        public DateTime CreatedDate { get; set; }
        public string Author { get; set; }
        public string BlogTitle { get; set; }
        public string BlogDescription { get; set; }
        public ICollection<BlogMedia> BlogMedia { get; set; }
    }

    public class BlogMedia
    {
        public int Id { get; set; }
        public int BlogId { get; set; }
        public Blog Blog { get; set; }
        public string BlogPicturePath { get; set; }
    }

    public class Db : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<BlogMedia> BlogMedia { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {


            using (var db = new Db())
            {
                db.Database.Log = m => Console.WriteLine(m);

                var q = from b in db.Blogs
                        select new
                        {

                            b.Id,
                            b.CreatedDate,
                            b.Author,
                            b.BlogTitle,
                            b.BlogDescription,
                            BlogPicturePath = b.BlogMedia.Any() ? b.BlogMedia.OrderByDescending(m => m.Id).FirstOrDefault().BlogPicturePath : null
                        };

                var results = q.ToList();



                Console.ReadKey();
            }
        }
    }
}

检查这个-我正在使用asp.net c,如何在x.CreatedDate,x.Author中绑定这些b.CreatedDate,b.Author等?这应该是另一个问题。我根据需要使用了您的代码,但问题在BlogPicturePath中,它从tblBlogMedia获取最大值,并将该值与tblBlogs中存在的所有记录绑定。我希望每个博客只绑定其图像,并且该图像位于tblBlogMedia中的最大id处。它从tblBlogMedia获取最大值,并将该值与所有记录绑定不。如果您遵循从Blog到BlogMedia的导航属性,则每个Blog都会获得一个相关的BlogPicturePath.BlogPicturePath=db.tblBlogMedias.Any?db.tblBlogMedias.OrderByDestingingM=>m.id.FirstOrDefault.BlogPicturePath:null;这是我写的。我非常接近我的结果,每件事都很好,但唯一绑定的图像位于最后一个索引值,并且该图像绑定了所有记录..这就是问题所在,
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EfDbFirstTest
{
    public class Blog
    {
        public int Id { get; set; }
        public DateTime CreatedDate { get; set; }
        public string Author { get; set; }
        public string BlogTitle { get; set; }
        public string BlogDescription { get; set; }
        public ICollection<BlogMedia> BlogMedia { get; set; }
    }

    public class BlogMedia
    {
        public int Id { get; set; }
        public int BlogId { get; set; }
        public Blog Blog { get; set; }
        public string BlogPicturePath { get; set; }
    }

    public class Db : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<BlogMedia> BlogMedia { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {


            using (var db = new Db())
            {
                db.Database.Log = m => Console.WriteLine(m);

                var q = from b in db.Blogs
                        select new
                        {

                            b.Id,
                            b.CreatedDate,
                            b.Author,
                            b.BlogTitle,
                            b.BlogDescription,
                            BlogPicturePath = b.BlogMedia.Any() ? b.BlogMedia.OrderByDescending(m => m.Id).FirstOrDefault().BlogPicturePath : null
                        };

                var results = q.ToList();



                Console.ReadKey();
            }
        }
    }
}
                  var q = (from d in db.tblBlogMedias
                         join c in db.tblBlogs on d.BlogId equals x.id
                         select new
                         {
                             d.Id,
                             d.BlogPicturePath
                         }).OrderByDescending(d=>d.Id).Max(d => d.BlogPicturePath);