簡體   English   中英

類型組合為lambda linq的表達式調用,其中

[英]Expression Call with Type Combining lambda linq where

我正在嘗試為DataTable創建動態查找過濾器。

當前代碼看起來像這樣,我遍歷每個行/列。 (一張桌子喂另一張桌子)

    DataRow FoundRow=null;
             foreach (string ID in IDToCheck)
        {
                        FoundRow = IdTable.AsEnumerable().Where(row => row.Field<string>(ID).Equals(
                            RowInfo[ID].ToString(),StringComparison.InvariantCultureIgnoreCase)).First();
DoStuffWith(FoundRow);
        }

我無法將row.Field<string>(ID)Expression.Call

我正在嘗試重現Microsoft的示例。

我不知道您是否真的會從中獲得任何性能提升。

但是,只是為了回答直接的問題:“將row.Field(ID)轉換為Expression.Call”

IQueryable<DataRow> queryableData = IdTable.AsEnumerable().AsQueryable();

// Get the generice "Field<string>(string)" method from DataRowExtensions
ParameterExpression pe = Expression.Parameter(typeof(DataRow), "row");
MethodInfo fieldMethod = typeof (DataRowExtensions).GetMethod("Field", new [] {typeof(DataRow),typeof(string)});
MethodInfo genericFieldMethod = fieldMethod.MakeGenericMethod(typeof (string));

Expression left = Expression.Call(null, genericFieldMethod, pe, Expression.Constant( col_name ));
Expression right = Expression.Constant(value);
Expression exp = Expression.Equal(left, right);

IQueryable<DataRow> results = queryableData.Where(Expression.Lambda<Func<DataRow, bool>>(exp, pe));

暫無
暫無

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

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