Entity framework LINQ连接到顶部(1)
我再一次为LINQ查询的语法而挣扎 我看了看,但我还是很困惑 用户可以有0-n张照片 我有我需要的SQL,但无法解决如何在LINQ中实现这一点。SQL是这样的:Entity framework LINQ连接到顶部(1),entity-framework,linq,Entity Framework,Linq,我再一次为LINQ查询的语法而挣扎 我看了看,但我还是很困惑 用户可以有0-n张照片 我有我需要的SQL,但无法解决如何在LINQ中实现这一点。SQL是这样的: SELECT User.Name, Photo.ImageUri FROM User LEFT OUTER JOIN Photo ON Photo.Id = ( SELECT TOP 1 Id FROM Photo WHER
SELECT User.Name, Photo.ImageUri
FROM User
LEFT OUTER JOIN Photo
ON Photo.Id =
(
SELECT TOP 1 Id
FROM Photo
WHERE UserId = User.Id
)
我正在使用实体框架(.NET Core),并尝试了以下操作:
var users = _context.Users.Select(x => new
{
name= x.Name,
photo = x.Photos.Select(c => c.ImageUri).FirstOrDefault()
});
问题是,对于每个用户,它都会在照片上创建一个SELECT。我正在寻找一种解决方案,它不需要对每个用户记录的数据库进行额外的查询。请不要只发布SQL并要求转换。至少显示一个类模型,以便导航属性和关联的多样性可见。另外,告诉你的目标是什么类型的LINQ(对实体?),并展示你自己的第一次努力。我理解,但我已经非常简化了我的要求,所以我可以在这里展示一个非常简单的例子。我使用的是EF-Core(C#),域与上面的非常不同。这就是为什么我没有包括我尝试过的内容,因为它与用户和照片没有如此简单的关系。很抱歉我尝试过这样的方法:var users=_context.users.Select(x=>new{name=x.name,photo=x.Photos.Select(c=>c.ImageUri.FirstOrDefault());这会导致我想要避免的多次选择。您的LINQ查询很好。您如何知道它会创建多个查询?它不应该这样做,如果它这样做了,那么问题就出在EF核心(它仍然没有发布,您使用的是哪个版本-RC1、RC2等?)我使用的是EF.NET核心RC2。您可以在Visual Studio 2015输出窗口中看到选择。好的,那么也许在最终版本中,它应该是一个类似于SQL的查询,你认为呢?嗯,太糟糕了,我认为RC2应该更接近RTM(没有工具),但谁知道呢。请不要只是发布SQL并要求转换。至少显示一个类模型,以便导航属性和关联的多样性可见。另外,告诉你的目标是什么类型的LINQ(对实体?),并展示你自己的第一次努力。我理解,但我已经非常简化了我的要求,所以我可以在这里展示一个非常简单的例子。我使用的是EF-Core(C#),域与上面的非常不同。这就是为什么我没有包括我尝试过的内容,因为它与用户和照片没有如此简单的关系。很抱歉我尝试过这样的方法:var users=_context.users.Select(x=>new{name=x.name,photo=x.Photos.Select(c=>c.ImageUri.FirstOrDefault());这会导致我想要避免的多次选择。您的LINQ查询很好。您如何知道它会创建多个查询?它不应该这样做,如果它这样做了,那么问题就出在EF核心(它仍然没有发布,您使用的是哪个版本-RC1、RC2等?)我使用的是EF.NET核心RC2。您可以在Visual Studio 2015输出窗口中看到选择。好吧,那么也许在最终版本中,它应该是一个类似于SQL的单一查询,你认为呢?嗯,太糟糕了,我认为RC2应该更接近RTM(w/o工具),但谁知道呢。