我想從幾個串列中找到笛卡爾積:
var list1 = new List<int> { 1, 2, 3};
var list2 = new List<string> { "A" };
var list3 = new List<int>();
我試圖得到的最終結果是一個包含各種可能組合的物件串列:
{ list1Value: 1, list2Value: "A", list3Value: null },
{ list1Value: 2, list2Value: "A", list3Value: null },
{ list1Value: 3, list2Value: "A", list3Value: null }
為此,我使用 linq 查詢語法:
var combinations = from value1 in list1
from value2 in list2
from value3 in list3
select new Combination
{
List1Value: value1,
List2Value: value2,
List3Value: value3
}
然而,因為list3是空,所以combinations也是空。如果我list3至少提供 1 個專案,則一切正常。如何處理查詢語法中的空串列,以便它仍然從其他串列中進行選擇?
uj5u.com熱心網友回復:
干得好:
var list1 = new List<int> { 1, 2, 3 };
var list2 = new List<string> { "A" };
var list3 = new List<int>();
var combinations =
from value1 in list1
from value2 in list2
from value3 in
list3
.Select(x => (int?)x)
.DefaultIfEmpty()
select new
{
List1Value = value1,
List2Value = value2,
List3Value = value3
};
關鍵的變化是使用.Select(x => (int?)x)which 將 anint變成 a int?,然后允許.DefaultIfEmpty()return null,從而在值丟失時使輸出清晰。
我得到的輸出是:

如果我進行此更改:
var list3 = new List<int>() { 0, 4 };
...然后輸出變為:

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/397520.html
