gpt4 book ai didi

c# - 使用 IQueryable 和 Linq.Expressions 速记加入?

转载 作者:行者123 更新时间:2023-11-30 20:14:49 28 4
gpt4 key购买 nike

我刚刚让这个查询正常工作:

int playerId = 1;
var x = from ghp in _context.GameHasPlayers
from g in _context.Games
where ghp.PlayerId == playerId && g.Id == ghp.GameId
select new Game { };

它给了我一个 IQueryable<Game>我将其转换为列表,return x.ToList();

但是我见过很多这样写的查询:

var a = _context.GameHasPlayers.Where(ghp => ghp.PlayerId == playerId);

哪里var a变成 IQueryable<GameHasPlayers>

我想知道两件事

  1. 这是否在幕后使用了相同的 Linq.Expressions 技术,只是使用了不同的(速记?)语法 - 这种语法有特定的名称吗? (用于谷歌搜索)
  2. 如何使用此语法编写第一个成功的查询?我卡住了:

var a = _context.GameHasPlayers.Where(ghp => ghp.PlayerId == playerId);
var b = _context.Games.Where(g => g.Id == a.GameId);

第二行无法识别有效字段 a.GameId,但我想我不能像那样传递这组 IQueryable header 。

在 SQL 中我会写类似 IN _context.Games.Where(g => g.Id in a.GameId); 的东西

最佳答案

此技术称为 Method chain Syntax .方法链和查询语法都是 Linq 的一部分并且是等价的。

您可以使用 Join 在方法链语法中编写查询:

var res = _context.GameHasPlayers
.Where(x => x.PlayerId == playerId)
.Join(_context.Games,
ghp => ghp.GameId,
g => g.Id,
(gameHasPlayer, game) => new Game { }
);

我已经重写了您的原始查询,首先对其进行过滤,然后将过滤后的结果与 Games 表连接起来,您可以从中获取更多数据。

关于c# - 使用 IQueryable 和 Linq.Expressions 速记加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com