C#Linq并集返回Null
我有一个简单的linq查询,它联合实现相同接口的两个表 对于这个例子,让我们假设IAnimalC#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
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子句。