![](/img/trans.png)
[英]Can a LINQ Expression defined as a lambda expression include other LINQ Expressions?
[英]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.