C#Linq查詢DataTable注意事項

Linq查詢時,涉及DataTable,查詢結果可能爲null,如果直接轉換爲新DataTable,則會報錯。

例如:

try
{
    List<int> intList = new List<int>();
    intList.Add(1);
    intList.Add(2);

    DataTable table = new DataTable();
    table.Columns.Add("ID", Type.GetType("System.Int32"));
    table.Columns.Add("Name", Type.GetType("System.String"));

    DataTable result = (from q in table.AsEnumerable()
                        join p in intList on q.Field<int>("ID") equals p
                        select q).CopyToDataTable();
}
catch (Exception ex)
{
    throw ex;
}

上述程序運行是會報錯:數據源中沒有 DataRow。

由於查詢結果沒有數據,導致CopyToDataTable()方法報錯。此種情況下,需要添加中間變量。

var result = from q in table.AsEnumerable()
                    join p in intList on q.Field<int>("ID") equals p
                    select q;
DataTable dt = table.Clone();
if (result.Count() > 0)
{
    dt = result.CopyToDataTable();
}

修改後,程序運行就沒有問題了。


發佈了36 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章