如何在 linq 上的数据库中搜索两个表? [复制]

Posted

技术标签:

【中文标题】如何在 linq 上的数据库中搜索两个表? [复制]【英文标题】:How to search two tables in Database on linq? [duplicate] 【发布时间】:2021-08-26 13:16:29 【问题描述】:

我构建了一个对我来说似乎有点麻烦的代码,我相信它可以在 linq 中进行优化

我有一张所有喜欢这篇文章的用户的表格—— 起初我搜索了所有喜欢的文章, 然后我创建了一个循环来检查用户 ID 并将其添加到新列表中。


Users cUser = new Users ();
List <Users> allUsers = new List <Users> ();
List <Likes> allLikes = await _context.Likes.Where (x => x.AfazaId == id) .ToListAsync ();
foreach (Likes item in allLikes)

    cUser = await _context.User.Where (x => x.Id == item.Id).FirstOrDefaultAsync ();
    allUsers.Add (cUser);

虽然可行,但我认为可以缩短代码..有人有什么建议吗?

【问题讨论】:

从如何在 t-sql 中执行此操作开始。现在将其映射到 linq。 (您将使用内部联接,并在 linq 中使用 .Join 扩展名)。一般的经验法则是,如果您可以使用单个 sql 语句执行此操作,您也可以使用单个 linq 语句执行此操作。 【参考方案1】:

这个查询应该是最优的:

var query =
    from like in _context.Likes.Where(x => x.AfazaId == id)
    from user in _context.User.Where(x => x.Id == like.Id).Take(1)
    select user;

var allUsers = await query.ToListAsync();

【讨论】:

以上是关于如何在 linq 上的数据库中搜索两个表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Entity Framework Core 中,如何使用数据库级别的条件(不是本地 LINQ)查询连接表上的数据?

如何在 linq 中使用 orderby 和 2 个字段? [复制]

Linq复制/复制整个记录

linq查询具有不同属性的多个表

如何使用 LINQ 和 EF 将记录复制到另一个表及其关系

如何关联不同 dbml 图上的 Linq-To-Sql 对象?