Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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#_.net_Linq_Left Join_Cartesian Product - Fatal编程技术网

C# 即使一个集合为空,LINQ查询获取笛卡尔积的方法是什么?

C# 即使一个集合为空,LINQ查询获取笛卡尔积的方法是什么?,c#,.net,linq,left-join,cartesian-product,C#,.net,Linq,Left Join,Cartesian Product,假设我有两个列表,其中一个是空的: List<string> foo = new List<string>(){ "Ali","wall-e","Ellie" }; List<string> bar = new List<string>(); 当条为空时,LINQ返回一个空结果集 问题: 如何编写上述查询以便接收此结果集: Ali,NULL Wall-e,NULL Ellie,NULL 也许这就是你想要的: var q = from f i

假设我有两个列表,其中一个是空的:

List<string> foo = new List<string>(){ "Ali","wall-e","Ellie" };
List<string> bar = new List<string>();
当条为空时,LINQ返回一个空结果集

问题: 如何编写上述查询以便接收此结果集:

Ali,NULL

Wall-e,NULL

Ellie,NULL

也许这就是你想要的:

var q = from f in foo.DefaultIfEmpty()
    from b in bar.DefaultIfEmpty()
    select new {f,b};

我不会称之为笛卡尔积,但我明白你想要什么。@ColonelPanic你是对的,如果一个“因子”集为空,则真正的笛卡尔积为空。我同意,但我想不出更好的提问方式。此外,我们还可以通过使用另一个重载指定DefaultIfEmpty(“”)。@SivaGopal当然,例如
.DefaultIfEmpty(“NULL”)
。当不指定任何内容时,我们为
字符串
获取默认值
null
(null引用)。为什么
foo.DefaultIfEmpty()
foo.DefaultIfEmpty(null)
from
子句中可以正常工作,但是
foo.Any()?foo:null
抛出一个
ArgumentNullException
?@Ruben9922这似乎是因为冒号后面的
null
不是包含一个成员的集合的实例,该成员是
null
。相反,它是一个缺少的集合,因此产生了异常。您可以使用类似于
foo.Any()的东西?foo:新列表{null,}
。如果
foo
有成员,那么它将被枚举两次(但当它只是内存中的.NET集合时,这并不是一个真正的问题;尽管如此,有了编译时
List
,我还是会亲自编写
foo.Count!=0
.Count
属性是免费获取的),而不是
foo.Any()
)。
var q = from f in foo.DefaultIfEmpty()
    from b in bar.DefaultIfEmpty()
    select new {f,b};