Dataview Row filter中的stackoverflow异常
-
02-10-2019 - |
题
我在dataview rowfilter属性中发现了“ system.stackoverflowexception”的“ dype'system.stackoverflowexception”的“ deve'system.stackoverflowexception'的例外”。我没有任何堆栈跟踪。因此,任何人都可以帮助我。请在下面找到我在FilterView中遇到错误的代码。
DataSet metalAttributeDS = LoadItemData(); //loads the static dataset
DataTable metalDataTable = metalAttributeDS.Tables["FilterTable"];
DataView metalfilterView = new DataView(metalDataTable);
metalfilterView.ApplyDefaultSort = true;
metalfilterView.RowFilter = queryBuilder +
string.Format(
" And AttributeName='Metal' and AttributeValueID in ({0})",
string.Join(",", AttributeValueID.ToArray())); //forms query condition dynamically.
var res = from DataRowView rowView in metalfilterView select rowView["ItemID"].ToString();
int countParam = 0;
queryBuilder.AppendFormat(" and (");
foreach (string id in res)
{
countParam++;
queryBuilder.AppendFormat(" ItemID = '{0}'", id);
if (res.Count() > countParam)
{
queryBuilder.Append(" Or");
}
}
queryBuilder.Append(" )");
}
DataSet dataSet = LoadItemData(); //loads the static dataset
DataTable dataTable = dataSet.Tables["FilterTable"];
DataView filterView = new DataView(dataTable);
filterView.ApplyDefaultSort = true;
LogHelper.LogInfo(GetType(), "filterView.RowFilter");
filterView.RowFilter = queryBuilder.ToString(); // throws error
谢谢,Mehul Makwana。
解决方案 3
我在Aristos的帮助下解决了这个问题,但是,我对Aristos片段进行了几乎没有修改,
foreach (string id in res)
{
sbTheOr.Append(',');
Guid guid = new Guid(id);
sbTheOr.AppendFormat("Convert('{0}','System.Guid')",guid);
}
if (sbTheOr.Length > 0)
{
// remove the first ,
sbTheOr.Remove(0, 1);
queryBuilder.AppendFormat(" and ItemID in ({0})",sbTheOr.ToString());
}
因此,堆栈溢出例外仅仅是因为结果很大。并发现了我们可以使用RowFilter在GUID列上使用RowFilter的新事物 转换(表达式,类型) 句法。
每1,谢谢
Mehul Makwana。
其他提示
也许您可以与或无法处理...如果尝试此问题...?
StringBuilder sbTheOr = new StringBuilder();
foreach (string id in res)
{
sbTheOr.Append(',');
sbTheOr.Append(id);
}
if (sbTheOr.Length > 0)
{
// remove the first ,
sbTheOr.Remove(0, 1);
queryBuilder.AppendFormat(" and ItemID IN (" + sbTheOr.ToString() + ")");
}
您可以验证“ QueryBuilder”中所内置的内容?我认为有可能 '和'/'或'/打开或闭合支架 最后进一步。
简化了解决方案
StringBuilder sb =new StringBuilder();
res.ToList().ForEach(x => sb.Append(", " + String.Format("Convert('{0}','System.Guid')", new Guid(x))));
var output = sb.ToString().Trim(',');
不隶属于 StackOverflow