Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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# 如何使用LINQ中的表达式执行此查询?_C#_Sql_.net_Linq_Entity - Fatal编程技术网

C# 如何使用LINQ中的表达式执行此查询?

C# 如何使用LINQ中的表达式执行此查询?,c#,sql,.net,linq,entity,C#,Sql,.net,Linq,Entity,在您给出的尝试查询中,我没有看到正在使用任务 由于子查询和主查询之间没有关系,因此应将它们拆分为两个查询: select t.* from Task t inner join Project p on a.ProjectId = t.ProjectId where p.ProjectTypeId IN ( select ptg.ProjectTypeId from UserGroup ug

在您给出的尝试查询中,我没有看到正在使用任务

由于子查询和主查询之间没有关系,因此应将它们拆分为两个查询:

select t.*
from Task t
inner join Project p on a.ProjectId = t.ProjectId
where p.ProjectTypeId IN    (   select ptg.ProjectTypeId
                                from UserGroup ug 
                                inner join ProjectTypeGroup ptg on ug.GroupId = ptg.GroupId
                                where ug.UserId = 1 -- MUTABLE VALUE
                            )
获得输出后,检查是否包含

var projTypeIds = (from ug in UserGroup 
                   join ptg in ProjectTypGroup on ug.GroupId equals ptg.GroupId
                   where ug.UserId == 1
                   select ptg.ProjectTypeId).ToList()
我假设您只需要此查询中的一个对象,因此使用了
.FirstOrDefault()
,如果您需要使用
.ToList()
的列表,则可以使用此选项

var task = (from t in Task
            join p in Project on p.ProjectId equals t.ProjectId
            where projTypeIds.Contains(p.ProjectTypeId)
            select t).FirstOrDefault();
from t in Task
join p in Project
    on t.ProjectId equals p.ProjectId
let subQ = ( from ug in UserGroup
             join ptg in ProjectTypeGroup
                on ug.GroupId equals ptg.GroupId
             where ug.UserId == 1
             select ptg.ProjectTypeId)
where subQ.Contains(p.ProjectTypeId)  
select t
或者你可以用这个

var task = (from t in Task
            join p in Project on p.ProjectId equals t.ProjectId
            where projTypeIds.Contains(p.ProjectTypeId)
            select t).FirstOrDefault();
from t in Task
join p in Project
    on t.ProjectId equals p.ProjectId
let subQ = ( from ug in UserGroup
             join ptg in ProjectTypeGroup
                on ug.GroupId equals ptg.GroupId
             where ug.UserId == 1
             select ptg.ProjectTypeId)
where subQ.Contains(p.ProjectTypeId)  
select t

你的尝试是什么?我不知道如何在LINQ中使用Contains或其他什么来做同样的事情,我尝试了几种方法,但都没有成功。添加您的实体以及您的几种方法。_task.Where(t=>u projectType.Join(UserGroup,tg=>tg.GroupId,ug=>ug.GroupId,(tg,ug=>new{tg,ug})。其中(n=>n.ug.UserId==loggedUserId)。包含(t=>t.ProjectTypeId)–丹尼尔·洛佩斯27分钟前抱歉,实际上,我重新键入了代码,正确的应该是_task.Where(t=>_projectType.Join(UserGroup,tg=>tg.GroupId,ug=>ug.GroupId,(tg,ug)=>new{tg,ug})。其中(n=>n.ug.UserId==loggedUserId)。包含(t=>t.ProjectTypeId),我尝试获取一个任务列表,用户可以通过用户组和项目类型之间的关联查看任务列表谢谢,我将其拆分为查询,但我对其性能感到震惊,我这样做了,使用表达式保留项目模式:var projectTypeIds=\u projectType.Join(UserGroup,tg=>tg.GroupId,ug=>ug.GoupId,(tg,ug)=>new{tg,ug})。其中(n=>n.ug.UserId==loggedUserId)。选择(n=>n.tg.ProjectTypeId);返回wait\u task.OrderByDescending(t=>t.CreationDate)。其中(t=>ProjectTypeId.Contains(t.ProjectTypeId))。谢谢,我使用表达式是因为这是这个项目中的模式,我需要使用表达式分成两个查询:var projectTypeIds=\u projectType.Join(UserGroup,tg=>tg.GroupId,ug=>ug.GoupId,(tg,ug=>new{tg,ug})。其中(n=>n.ug.UserId==loggedUserId)。选择(n=>n.tg.ProjectTypeId);return wait _task.OrderByDescending(t=>t.CreationDate)。其中(t=>ProjectTypeId.Contains(t.ProjectTypeId))。