Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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_Linq - Fatal编程技术网

C# 条件linq查询

C# 条件linq查询,c#,sql,linq,C#,Sql,Linq,将此SQL转换为linq的最佳方法是什么 我之前已经基于这样的sql在数据库中创建了视图,然后使用linq查询该视图。但我想知道是否还有其他方法 SQL为任务查找分配的对象。任务表包含三个外键列,因为分配的对象可能来自部门、职位或个人。只允许一个 SQL: 使用LinqToEF可以这样编写: var q = from t in task from dep in department.Where(x => x.id == t.idAssignedDepartment).Def

将此SQL转换为linq的最佳方法是什么

我之前已经基于这样的sql在数据库中创建了视图,然后使用linq查询该视图。但我想知道是否还有其他方法

SQL为任务查找分配的对象。任务表包含三个外键列,因为分配的对象可能来自部门、职位或个人。只允许一个

SQL:


使用LinqToEF可以这样编写:

var q = from t in task
        from dep in department.Where(x => x.id == t.idAssignedDepartment).DefaultIfEmpty()
        from pos in position.Where(x => x.id == t.idAssignedPosition).DefaultIfEmpty()
        from per in person .Where(x => x.id == t.idAssignedPerson).DefaultIfEmpty()
        select new
        {
            t.id,
            t.title,
            assigned_to = t.idAssignedDepartment != null ? dep.description :
                          t.idAssignedPosition != null ? pos.description :
                          t.idAssignedPerson != null ? per.fullname : 
                          null
        };

你的问题很广泛。你用的是什么口味的linq?L2E,L2S,L2D?你应该发布一些你拥有的和你想要完成的c代码context@Kman您的查询是否与此完全相同,或者您是否进行了任何添加?它与此完全相同,似乎当我添加多个“from”时在查询中,我得到了这个异常。数据库中是否有所有数据源(任务、部门…)表?当您尝试比较两个复杂对象时,通常会出现此错误。我假设
idAssignedDepartment
t.Id
是基本类型?是的,它们在那里。我可以问他们“孤立”。id都是整数。然而,我是通过LinqPad来运行这个,而不是从一个实际的项目。
var q = from t in task
        from dep in department.Where(x => x.id == t.idAssignedDepartment).DefaultIfEmpty()
        from pos in position.Where(x => x.id == t.idAssignedPosition).DefaultIfEmpty()
        from per in person .Where(x => x.id == t.idAssignedPerson).DefaultIfEmpty()
        select new
        {
            t.id,
            t.title,
            assigned_to = t.idAssignedDepartment != null ? dep.description :
                          t.idAssignedPosition != null ? pos.description :
                          t.idAssignedPerson != null ? per.fullname : 
                          null
        };