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