gpt4 book ai didi

c# - 带参数的表达式(LINQ、SQL、C#)

转载 作者:行者123 更新时间:2023-11-30 21:40:00 25 4
gpt4 key购买 nike

我努力寻找正确的方法来查询我的数据库中的特定实体。我有一个 TeamMember 表,如下所示:

public class TeamMember
{
public Guid TeamId { get; set; }
public Guid ManagerUserId { get; set; }
...
}

我想在多个职位上查询我团队中的“TeamManager”。

public TeamMember GetTeamManager(Guid teamId, List<TeamMember> teamMembers)
{
return teamMembers.FirstOrDefault(member => member.TeamId == teamId && member.ManagerUserId == null);
}

如果我想在表达式中使用一个方法,例如(不是真正的代码),

...
// IQueryable<TeamMember>
teamMembers.Where(member => member.team.GetTeamManager(teamId, teamMembers))

它适用于内存对象,但这不能与 Entity Framework 结合使用,所以真正的数据库对象。

因此我尝试使用静态表达式,但我没有找到任何将静态表达式与变量结合使用的解决方案,例如:

// this should be an ideal solution
Expression<Func<TeamMember, bool>> exp = teammember => teamMember.TeamId == **CUSTOM_VARIABLE** && teamMember.ManagerUserId == null;

teamMembers.Where(exp)

我想重用表达式,但我也希望能够修改变量。我的目标是避免在两者之间创建一个对象,因为下面的方法可以工作,但效率较低(如果我错了请纠正我)

teamMembers.ToList().Where(member => member.team.GetTeamManager(teamId, teamMembers))

所以请帮我解决我的问题:)。提前致谢!

最佳答案

你不能制作exp一个属性,因为需要捕获一个变量,但你可以使它成为一个返回 Expression<Func<TeamMember,bool>> 的函数:

Expression<Func<TeamMember,bool>> MakeMemberExpression(Guid teamId) {
return teammember => teamMember.TeamId == teamId && teamMember.ManagerUserId == null;
}

甚至

Expression<Func<TeamMember,bool>> MakeMemberExpression(Guid teamId) =>
teammember => teamMember.TeamId == teamId && teamMember.ManagerUserId == null;

您可以按如下方式使用它:

var members = teamMembers.Where(MakeMemberExpression(teamId));

关于c# - 带参数的表达式(LINQ、SQL、C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905398/

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