簡體   English   中英

表達式不能包含lambda表達式Linq

[英]Expression can not contain lambda expression Linq

在此處輸入圖片說明

我有數據表,我正在嘗試尋找以特殊值開頭的Id列的總和。我嘗試了一些方法但出現錯誤。

result=Convert.ToInt32(dtNew.Compute("Sum(ResPending)", "Substring(ID,0,1)='G'"));//error shows-- Substring() argument is out of range

並且也嘗試了這種方式

dtNew.AsEnumerable().Where(x => x.Field<string>("ID").ToString().StartsWith("G"));//Expression can not contain lambda expression
result = Convert.ToInt32(dt.Compute("sum(ResPending)", "ID LIKE 'G*'"));

//這對我有用。

dtNew.AsEnumerable().Where(x => x.Field<string>("ID").ToString().StartsWith("G"));

這也有效。

下面是測試代碼:

 Random ran = new Random();
        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");
        dt.Columns.Add("ResPending", typeof(Int32));
        for (int i = 0; i < 11; i++)
        {
            DataRow dr = dt.NewRow();
            if (i % 2 == 0)
            {
                dr[0] = "G123" + i;
            }
            else
            {
                dr[0] = i;
            }

            dr[1] = "an";
            dr[2] = ran.Next(1, 100);
            dt.Rows.Add(dr);
        }

        int result = 0;
        //// result =  Convert.ToInt32(dt.Compute("sum(ResPending)", "ID LIKE 'G*'"));
        ////result   = Convert.ToInt32(dt.Compute("Sum(ResPending)", "Substring(ID,0,1)='G'")); ////this throws error. as index is 1 based
        var k  = dt.AsEnumerable().Where(x => x.Field<string>("ID").ToString().StartsWith("G"));

您需要使用

Substring(ID,1,1) 

此示例代碼返回3 DataRows

var coll = dt.AsEnumerable().Where(k => k.Field<string>(0).Contains("G")).Select(p => p).ToList();

這是你想要的嗎?

暫無
暫無

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

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