簡體   English   中英

c# 如何通過 LINQ 查詢數據表

[英]c# How to query Datatable by LINQ

我知道如何通過 LINQ 查詢數據表,但代理名稱出現在我無法查詢的數據表列中。 看看數據是怎么來的。 附上屏幕截圖。

在此處輸入圖像描述

請參閱美銀美林或德意志銀行,這些是作為一列出現的經紀人名稱。

這種方式我一般通過LINQ查詢數據表。

                ds.Tables[2].AsEnumerable().Where(x => x.Field<int>("EarningID") == earningsid
                    && x.Field<string>("EarningsType") == earningsType
                    && x.Field<string>("EarningsType") == earningsType
                    && x.Field<string>("DisplayInCSM") == DisplayInCSM
                    && x.Field<string>("Type") == Type
                    && x.Field<string>("Broker") == BrokerCode
                    && x.Field<string>("Period") == Period
                    );

現在告訴我如何在代理名稱的 where 條件下再添加一個子句。

我怎么能在 where 子句中提到列名,例如&& x.Field<string>("Deutsche Bank")結果 LINQ 查詢應該返回值說19738.5877

在我上面的 linq 查詢中,我在 where 中提到了很少的條件,但我怎么能在 where 中提及德意志銀行的列名,我應該得到值19738.5877

請分享正確的 LINQ 查詢,我還可以在其他條件下提及列名。 謝謝

編輯

我嘗試用這種方式查詢列,但收到錯誤附加信息:無法將 DBNull.Value 轉換為類型“System.Int32”。 請使用可為空的類型。

private string GetData<T>(DataTable table, DataTable dt, int earningsid, string earningsType, string DisplayInCSM,
    string Type, string BrokerCode, string Period, T value) where T : IComparable<T>
{
    string brokername = GetBrokerName(dt, BrokerCode);

    IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
            .Where(r => r.Field<int>("EarningID") == earningsid
                && r.Field<string>("EarningsType") == earningsType
                && r.Field<string>("DisplayInCSM") == DisplayInCSM
                && r.Field<string>("Type") == Type
                && r.Field<string>("Broker") == BrokerCode
                && r.Field<string>("Period") == Period
                && r.Field<T>(brokername).CompareTo(value) >= 0);

    string rowValue =(rows.FirstOrDefault()[brokername]==DBNull.Value ? "" : rows.FirstOrDefault()[brokername].ToString());

    return rowValue;
}

編輯 1

------
            IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
                    .Where(r => r.Field<int>("EarningID") == earningsid
                        && r.Field<string>("EarningsType") == earningsType
                        && r.Field<string>("DisplayInCSM") == DisplayInCSM
                        && r.Field<string>("Type") == Type
                        && r.Field<string>("Broker") == BrokerCode
                        && r.Field<string>("Period") == Period
                        /*&& r.Field<T>(brokername).CompareTo(value) >= 0*/
                        && r.Field<object>(brokername) != DBNull.Value);

對於上面的代碼,我收到此錯誤無法將 DBNull.Value 轉換為類型“System.Int32”。 請使用可為空的類型。

您不能將intSystem.DbNull進行比較,這就是異常告訴您的。 您的參數中唯一的intearningsid ,實際上您的屏幕截圖顯示了該列的 null 值。

很好, Field擴展方法還支持可空類型( r.Field<int?>("...") ):

IEnumerable<DataRow> rows = table.Rows.OfType<DataRow>()
    .Where(r => r.Field<int?>("EarningID") == earningsid
        && so on ...

暫無
暫無

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

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