簡體   English   中英

使用LINQ搜索數據表

[英]Search DataTable using LINQ

           table
Sr. No. | Arrival    | Departure  | 
-----------------------------------
1       | 10/08/2018 | 11/08/2018 |
-----------------------------------
2       | 11/08/2018 | 12/08/2018 |
-----------------------------------
3       | 12/08/2018 | 13/08/2018 |
-----------------------------------
4       | 13/08/2018 | 14/08/2018 |

我有dataTable名稱表。 我想搜索大於11/08/2018的數據並在dataGridView1中顯示結果。 我正在使用以下代碼,但無法正常工作。

  var dtCurrnet = DateTime.Now.Date;

        EnumerableRowCollection<DataRow> query = from arrvDate in dtReservation.AsEnumerable()
                                     where arrvDate.Field<DateTime>("ArrvDate") > dtCurrnet
                                     select arrvDate;


        DataView view = query.AsDataView();
        DataTable dtTest = view.ToTable(); 

        dataGridView1.DataSource = dtTest;

我遇到“ where arrvDate.Field(“ ArrvDate”)> dtCurrnet“問題,出現錯誤消息“指定的轉換無效”

請確保表中的列類型確實是DateTime類型。 我已經嘗試使用以下測試代碼查詢您的查詢,並且效果很好。 我懷疑您的ArrvDate的列類型不是DateTime ,可能是“字符串”類型。

檢查數據類型的一種方法是使用以下代碼,盡管設置斷點,調試然后檢查數據表要容易得多

Console.WriteLine(dtReservation.Columns["ArrvDate"].DataType.FullName);

無論如何,以下是我用來驗證Linq查詢的代碼示例; 它似乎工作正常。

var dtReservation = new DataTable();

dtReservation.Columns.Add("Sr. No.", typeof(Int32));
dtReservation.Columns.Add("ArrvDate", typeof(DateTime));
dtReservation.Columns.Add("Departure", typeof(DateTime));

dtReservation.Rows.Add(new Object[] { 1, new DateTime(2018, 8, 10), new DateTime(2018, 8, 11) });
dtReservation.Rows.Add(new Object[] { 2, new DateTime(2018, 8, 11), new DateTime(2018, 8, 12) });
dtReservation.Rows.Add(new Object[] { 3, new DateTime(2018, 8, 12), new DateTime(2018, 8, 13) });
dtReservation.Rows.Add(new Object[] { 4, new DateTime(2018, 8, 13), new DateTime(2018, 8, 14) });

var dtCurrnet = DateTime.Now.Date.AddDays(-11);

EnumerableRowCollection<DataRow> query =
    from arrvDate in dtReservation.AsEnumerable()
    where arrvDate.Field<DateTime>("ArrvDate") > dtCurrnet
    select arrvDate;

PS:我不得不稍微減去11天來更改您的代碼,以使其實際上從查詢中返回一行; 因為它現在是23號,因此您給出的示例值一直排到13號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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