Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有IF和switch条件的EF Add where子句_C#_Entity Framework_Linq - Fatal编程技术网

C# 带有IF和switch条件的EF Add where子句

C# 带有IF和switch条件的EF Add where子句,c#,entity-framework,linq,C#,Entity Framework,Linq,我想知道是否有一种方法可以缩短此块代码: 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,

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

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的最后一部分,具体取决于是否选中RADIOUBUTON。像这样

if (rdball.Checked ==true)
    query = query + " where sg.GroupID ==" + Convert.ToInt32(cmbGroupSearch.SelectedValue) 
end if
但我不明白如何用EF做到这一点。我不希望2000行代码仅仅用于重复查询就变成3000行。
提前感谢。

其中
接受任何布尔表达式,因此您可以执行以下操作:

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
    };

我想您可以执行类似于
where sg.GroupID==Convert.ToInt32(rdball.Checked?sg.GroupID:cmbGroupSearch.SelectedValue)
的操作,您可以分离查询的
where
部分。看这个,正是我要找的。ThanksIt可能很想了解EF如何转换此查询。@bubi您可以尝试使用上下文的Database.Log对象,或者尝试调用
query.ToTraceString()
,请参阅详细信息。