[英]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”。 請使用可為空的類型。
您不能將int
與System.DbNull
進行比較,這就是異常告訴您的。 您的參數中唯一的int
是earningsid
,實際上您的屏幕截圖顯示了該列的 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.