none
LINQ的Take和CopyToDataTable的疑問 RRS feed

  • 問題

  • 小弟碰上了一個百思不解的問題, 想請問各位大德是否知道這是怎麼一回事, 謝謝。

    以下是我的程式碼(簡略), 大意是說在資料庫取得某些資料後填入DataTable, 再以LINQ的方式由DataTable裡取得其中的某一筆資料, 

    int intCount;
    intCount = SourceTable.AsEnumerable().Where(rowS => rowS.Field<string>("ColumnName").ToUpper().Contains(Keyword.ToUpper())).Count();
    // intCount得到5, 表示SourceTable裡合規則的資料筆數有5筆, 這個沒錯

    IEnumerable<System.Data.DataRow> rowTemp;
    rowTemp = SourceTable.AsEnumerable().Where(rowS => rowS.Field<string>("ColumnName").ToUpper().Contains(Keyword.ToUpper())).Take(1);
    // 好奇怪, rowTemp為null, 一筆資料都沒有

    System.Data.DataTable tbTemp;
    tbTemp = SourceTable.AsEnumerable().Where(rowS => rowS.Field<string>("ColumnName").ToUpper().Contains(Keyword.ToUpper())).Take(1).CopyToDataTable();
    // 但是tbTemp的Row count為1, 這樣又取得到資料了, why why why ???

    三個句子的語法幾乎完全相同, 差別只在於最後的動作, 而且都沒有丟出Exception, 為什麼第二段取不到資料, 而第三段又可以呢?!
    第二段句子是我原本的寫法, 它也並非完全無效, 是最近客戶向我反應, 為什麼會查不到資料? 我細查之後, 才發現有這樣的情形, 可是在什麼狀態下有用, 什麼狀態下會失效, 卻怎麼試也試不出來, 真的很奇怪呀!!!!

    2014年4月23日 上午 03:06

所有回覆