asp.net - 指定的强制转换无效Linq

时间:2012-11-08 12:26:50

标签: c# asp.net linq

我在尝试以下代码时遇到此错误

IEnumerable<DataRow> projjType = from projT in dtProjList.AsEnumerable()
                                 where projT.Field<int?>("ProjectId") == projId && 
                                 projT.Field<int?>("FilterId") == 1 
                                 select projT;

并且错误的堆栈跟踪是

at System.Data.DataRowExtensions.UnboxT`1.NullableField[TElem](Object value)
   at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
   at Folder.Projects.<>c__DisplayClass28.<repProjectList_ItemDataBound>b__1e(DataRow projT) in D:\Folder\Project.aspx.cs:line 1061
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Linq.SystemCore_EnumerableDebugView`1.get_Items()

其中dtProjList是DataTable,表结构如下,

ProjectId (int)
ProjectName (string)
ProjectThumb (string)
FilterTypeId (int)
FilterId (int)
FilterType (string)

所有都不是空值。任何人都可以帮帮我。

提前感谢。

更新 ::这是我记录的唯一记录吗?

ProjectId   ProjectName ProjectThumb    FilterTypeId    FilterId    FilterType
   1    Datamaster  small_14.jpg         1             1               Final

1 个答案:

答案 0 :(得分:4)

如果所有字段都不为空,则将字段转换为int而不是可为空int?

var projjType = from projT in dtProjList.AsEnumerable()
                where projT.Field<int>("ProjectId") == projId && 
                      projT.Field<int>("FilterId") == 1 
                select projT;