我正在尝试使用以下代码过滤数据表
private void Filter(string text)
{
int outText=0;
if (Int32.TryParse(text, out outText))
{
text = string.Empty;
}
DataTable DT = new DataTable();
DT = PinCDAO.GetArea().AsEnumerable().Where(r => r.Field<int>("AreaID")==Convert.ToInt32(outText) || (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();
}
我收到错误“指定演员表无效”。因为代码
r => r.Field<int>("AreaID")==Convert.ToInt32(outText)
我确定AreaID列包含整数
请帮助我解决这个问题。
答案 0 :(得分:2)
试用代码 - 在代码中处理null
因为“ AreaID ”是可以为空的字段。
DT = PinCDAO.GetArea().AsEnumerable().Where(r =>
(Convert.IsDBNull(r["AreaID"]) ? 0 : Convert.ToInt32(r["AreaID"])) ==outText
|| (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();
这段代码很容易处理空值..
已经回答了我的问题:"Specified cast is not valid" error in LINQ's orderby clause
答案 1 :(得分:1)
删除Convert.ToInt32,outText已使用if (Int32.TryParse(text, out outText))
DT = PinCDAO.GetArea().AsEnumerable()
.Where(r => r.Field<int>("AreaID")==outText
|| (r.Field<string>("AreaDescription")
.Contains(text))).AsDataView().ToTable();
您获得异常的原因可能是“AreaID”可能不包含int值
答案 2 :(得分:1)
您无需转换为int
outText
已宣布为int
....您只需按以下方式使用outText
:
r => r.Field<int>("AreaID")==outText
您可以通过以下方式更改expresson:
r => Convert.ToInt32(r["AreaID"])==outText
答案 3 :(得分:1)
作为out参数传递的变量不需要在传递之前初始化。此外,outtext不需要转换为Int32,因为它已经是。
private void Filter(string text) {
int outText;
if (Int32.TryParse(text, out outText))
{
// text was integer and parsed successfully.
text = string.Empty;
}
DataTable DT = new DataTable();
DT = PinCDAO.GetArea().AsEnumerable().Where(r => r.Field<int>("AreaID")== outText || (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable(); }