gpt4 book ai didi

c# - EF 添加带有 IF 和 switch 条件的 where 子句

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:56 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以缩短此 block 代码:

if (rdball.Checked ==true)
{
var query = from u in context.User
join ur in context.UserRole on u.ID equals r.UserID
join r in context.Role on ur.RoleID.ToString() equals r.ID.ToString()
select new
{
u.ID,
u.Nick,
u.LastLogin,
Role = ur == null ? String.Empty : r.Name
};
}
else
{
var query = from u in context.User
join ur in context.UserRole on u.ID equals r.UserID
join r in context.Role on ur.RoleID.ToString() equals r.ID.ToString()
where sg.GroupID == Convert.ToInt32(cmbGroupSearch.SelectedValue)
select new
{
u.ID,
u.Nick,
u.LastLogin,
Role = ur == null ? String.Empty : r.Name
};
}

在没有 EF 的情况下,我通常使用默认查询创建一个字符串,并根据是否选中单选按钮添加带有 where 的最后一部分。像这样

if (rdball.Checked ==true)
query = query + " where sg.GroupID ==" + Convert.ToInt32(cmbGroupSearch.SelectedValue)
end if

但我不明白如何使用 EF 执行此操作。而且我不希望 2000 行代码变成 3000 行只是为了重复查询。提前致谢。

最佳答案

Where 接受任何 bool 表达式,所以你可以这样做:

var query = from u in context.User
join ur in context.UserRole on u.ID equals r.UserID
join r in context.Role on ur.RoleID.ToString() equals r.ID.ToString()
where rdball.Checked ? sg.GroupID == Convert.ToInt32(cmbGroupSearch.SelectedValue) : true
select new
{
u.ID,
u.Nick,
u.LastLogin,
Role = ur == null ? String.Empty : r.Name
};

关于c# - EF 添加带有 IF 和 switch 条件的 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39796571/

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