[英]C# - LINQ query returns null to table and throws exception
我有一段代碼:
var tblGroupedMultiPassive = dtCSV.AsEnumerable()
.Where(r => r.Field<String>("course_type_id") == "3")
.GroupBy(r => new
{
product_id = r.Field<String>("product_id"),
owner_org_id = r.Field<String>("owner_org_id"),
});
if (tblGroupedMultiPassive.Count() > 0)
dtCSVMultiSCOPassive = tblGroupedMultiPassive.Where(grp => grp.Count() > 1)
.SelectMany(grp => grp)
.CopyToDataTable();
基本上在分配給dtCSVMultiSCOPassive的最終聲明中,它會拋出異常,因為沒有行。 我知道在此查詢之前有行,因此必須是LINQ查詢本身,以消除所有行。 很好,但是我必須能夠處理這種情況而不會成為例外。 有任何想法嗎?
您可能需要將此分為兩個語句:
DataTable dtCSVMultiSCOPassive = new DataTable();
var query = tblGroupedMultiPassive.Where(grp => grp.Count() > 1).SelectMany(grp => grp);
if(query.Any())
{
dtCSVMultiSCOPassive = query.CopyToDataTable();
}
我會發現grp.Count()
始終為1,這表明您在第一個查詢中具有product_id
和owner_org_id
唯一組合。
順便說一句,我相信.SelectMany(grp => grp)
是完全多余的。
您確定此語句不會返回null:
dtCSVMultiSCOPassive = tblGroupedMultiPassive.Where(grp => grp.Count() > 1);
?
因此,由於第一個條件tblGroupedMultiPassive.Count() > 0
似乎是正確的,所以我嘗試:
if (tblGroupedMultiPassive.Count() > 0)
{
dtCSVMultiSCOPassive = tblGroupedMultiPassive.Where(grp => grp.Count() > 1);
if(dtCSVMultiSCOPassive != null)
dtCSVMultiSCOPassive = dtCSVMultiSCOPassive.CopyToDataTable();
}
實際上,問題可能在於幾乎每個grp
僅包含一個元素,因此查詢返回空值,原因是查詢中第二個條件grp.Count() > 1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.