Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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

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并集返回Null_C#_Linq - Fatal编程技术网

C#Linq并集返回Null

C#Linq并集返回Null,c#,linq,C#,Linq,我有一个简单的linq查询,它联合实现相同接口的两个表 对于这个例子,让我们假设IAnimal var q = (from d in db.Dogs where d.AnimalID = PetID select d.Name) .Union (from c in db.Cats where c.AnimalID = PetID select c.Name) 因此,如果dog部分没有成员,q

我有一个简单的linq查询,它联合实现相同接口的两个表

对于这个例子,让我们假设IAnimal

var q = (from d in db.Dogs
         where d.AnimalID = PetID
         select d.Name)
        .Union
        (from c in db.Cats
         where c.AnimalID = PetID
         select c.Name)
因此,如果dog部分没有成员,q将被分配{“”{cat}中的任何内容。有没有一种方法可以在不执行
的情况下删除该空记录。其中(x=>x!=“x!=String.empty)


我知道这没什么大不了的,但似乎应该有更好的办法?

这怎么不是个好办法?怎么了

嗯。。它有一个问题。如果应该:

.Where(x => !string.IsNullOrEmpty(x))
.Where(x => x != null && x != "")
如果您使用的是实体框架或其他无法处理IsNullOrEMpty的LINQ提供程序,则代码应为:

.Where(x => !string.IsNullOrEmpty(x))
.Where(x => x != null && x != "")

您的代码使用
|
而不是
&&
,并对空字符串进行两次检查,但从不为空。

它将零与某物联合,然后扫描某物以找出零。看起来最好是确定什么都没有,然后回到联盟的另一边。不过,这可能会在SQL生成中得到解决。就像我说的,这没什么大不了的,只是看起来应该有一种先检查后联合的方法,而不是先检查再检查。你怎么知道LINQ在做什么?Linq很可能不会枚举您的对象,直到稍后才可以丢弃第一个集合。此外,组建工会基本上是免费的。它只枚举第一个集合,然后枚举第二个集合。这不像串接字符串。仅供参考,string.IsNullOrEmpty()没有到Sql的转换。但我知道我没有指定。@Shawn,您仍然需要在那里更改代码。看更新。是的,我的代码不好。这或多或少是个打字错误。我一直认为String.Empty和“”是不同的,但它们不是。我还认为字符串不能有空值,但我又错了。谢谢。我不明白你为什么从狗的查询中得到空字符串。如果没有匹配的狗,那么你应该有一个空集,而不是一个单一的空字符串集,然后你不应该做你的where子句。