簡體   English   中英

C#-LINQ查詢向表返回null並引發異常

[英]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_idowner_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM