Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq_Linq To Sql_Outer Join - Fatal编程技术网

C# 在Linq中使用左外连接

C# 在Linq中使用左外连接,c#,linq,linq-to-sql,outer-join,C#,Linq,Linq To Sql,Outer Join,我想用左外连接编写一个LINQ查询。为此,我可以编写相应的SQL查询,该查询返回所需的输出,但在LINQ中相同的查询不适用于我 以下是我的SQL的外观: SELECT Table1.ID, Table1.Description FROM Table1 LEFT OUTER JOIN Table2 ON Table1.AID = Table2.AID AND Table1.TID = Table2.TID WHERE (Table2.Status <> 'Using')

我想用左外连接编写一个
LINQ
查询。为此,我可以编写相应的
SQL
查询,该查询返回所需的输出,但在LINQ中相同的查询不适用于我

以下是我的SQL的外观:

  SELECT Table1.ID, Table1.Description
  FROM Table1 LEFT OUTER JOIN
  Table2 ON Table1.AID = Table2.AID AND Table1.TID = Table2.TID
  WHERE (Table2.Status <> 'Using') OR (Table.Status IS NULL) 
但我一直面临这个问题。在这里,它无法找到项目,因此返回

'Object reference not set to an instance of an object.'
我在这里做错了什么


我一直在尝试,但最终没有解决办法。因此,在此方面的任何帮助都将不胜感激。提前感谢..

您的SQL和LINQ语句不同,您有一个不同的join子句。 试试这个:

from t1 in db.Table1
    join t2 in db.Table2 on new { 
                                aID = t1.AID, 
                                tID = t2.TID 
                                } 
                         equals new { 
                                aID = t2.AID, 
                                tID = t2.TID 
                                } into outer
    from item in outer.DefaultIfEmpty()
    where item.Status == null || item.Status != "Using"
    select t1

您可以使用
new{}equals new{}
语句添加多重联接关系。

DefaultIfEmpty
如果集合中没有任何项,则返回包含单个默认项的集合

由于您的实体可能是类而不是结构,这意味着您将获得一个包含单个
null
的集合,而不是一个包含单个带有null字段的项的集合

除了join子句更改外,还应该将
where
条件更改为

where item == null || item.Status != "Using"

为什么有这个
AsEnumerable()
?您应该能够删除它。(两次)尝试了此操作,但在
项.Status
部分再次出现相同的错误。调试时,该字段的值显示为null。请检查。谢谢您的帮助。在删除具有相同where条件的AsEnumerable后,该操作起作用。谢谢您的帮助。在删除具有相同where条件的AsEnumerable后,该操作起作用。@Saroj这是正确的因为对于
aseneumerable
您使用的是LINQ to对象,其中读取null引用的属性将导致异常,而如果没有
aseneumerable
您使用的是LINQ to SQL,而SQL并不在意。
where item == null || item.Status != "Using"