Linq如何在连接结果上使用Where

Linq如何在连接结果上使用Where,linq,linq-to-entities,Linq,Linq To Entities,我需要对我的数据计算一些连接操作,在这些操作的结果上,我需要使用WHERE语句 目前我使用下面的语法,没有错误,但结果不是预期的。 当然,我需要对我的联接结果进行分组并对其应用查询 你能给我举个代码的例子吗?不幸的是,我在Linq是个新手,我不能胜任 var myImagesForUser = from i in context.CmsImagesContents join c in context.CmsContents on i.ContentId

我需要对我的数据计算一些连接操作,在这些操作的结果上,我需要使用WHERE语句

目前我使用下面的语法,没有错误,但结果不是预期的。 当然,我需要对我的联接结果进行分组并对其应用查询

你能给我举个代码的例子吗?不幸的是,我在Linq是个新手,我不能胜任

var myImagesForUser = from i in context.CmsImagesContents
                      join c in context.CmsContents on i.ContentId equals c.ContentId
                      join a in context.CmsAuthors on c.AuthorId equals a.AuthorId
                      join u in context.aspnet_Users on a.UserId equals u.UserId
                      where u.UserId == (Guid)myLoggedInUser.ProviderUserKey
                      select i;

其中a.UserId==(Guid)myLoggedInUser.ProviderUserKey.

可能当前登录用户的相关数据不存在于任何一个或多个表(作者、内容、图像内容)中,并且由于这些表上的内部联接,您不会得到任何结果。您可以尝试外部联接。查看Linq查询中的左外连接

嗯。我看到两件事我会做得不同

1.)您忘记在最后调用.ToList()来执行查询。否则,您可能会在处理后记中误用LINQ语句

 var myImagesForUser = (YOUR LINQ STATEMENT).ToList();
2.)奇怪的是,您需要将UserKey转换为GUID。如果真的需要,我会在LINQ语句之前进行检查,并检查局部变量

var userId = (Guid)myLoggedInUser.ProviderUserKey;
var myImagesForUser = (YOUR LINQ STATEMENT ... where u.UserId == userId ).ToList();

也许这有助于您获得预期的结果。

查询没有问题,您在寻找什么特定的代码示例?感谢您的思考。很抱歉,只有一个问题,为什么要使用局部变量(回答中的第2点)?性能原因?@Gibbok:我不知道EF将如何转换它。它有两种可能:a)在内存中转换,b)在SQL中使用(CAST())转换。为了决定a)我将在LINQ语句之前手动执行。感谢您的评论。是的,穆罕默德在经过一些测试后意识到我的查询正在工作,只是当前登录用户的相关数据不存在。谢谢你在这方面花时间。