Linq Specified cast无效

时间:2014-01-09 18:54:24

标签: c# sql linq

我查了很多有这个错误的帖子,但没有一个有这个特殊的问题。 (另外我是C sharp的新手一直是java dev)

我得到一个例外

  

发现了System.InvalidCastException

在代码段下方的 table2.Field(“MEME_CK”)行。

table2中有大约3K行,我找不到一种方法来避免行 table2.Field(“MEME_CK”)

的错误转换

数据可以为空,不存在,有效或无效。所以我尝试在泛型参数cast上使用nullable运算符。还看到有DBNull类可能代表不存在的值。

在进行“等于测试”或加入下面的代码之前,有没有办法预处理列数据? 即使在使用可空类型后我怎么能避免施放?

以下代码基本上基于MemberID(即MEME_CK或MemeCk)对两个数据表进行连接,并使用CapHeadID,MemeCk等创建新对象作为字段。

 var query =


       (from table1 in searchResult.AsEnumerable()
         join table2 in memberInfo.AsEnumerable()
         on table1.Field<decimal?>("MemeCk") equals
            table2.Field<decimal?>("MEME_CK") 
         select new
         {
              CapHeadID = table1.Field<decimal>("CapHeadID"),

             MemeCk = table1.Field<decimal>("MemeCk"),

             Suffix = table2.Field<decimal>("MEME_SFX"), 

             Suscriber = table2.Field<string>("SBSB_ID"),

              BusinessArea = table2.Field<string>("TEAM"),

             MemberName = table2.Field<string>("MemberName"),

             WorkTypeName = table1.Field<string>("WrkName"),

             SSN = table2.Field<string>("MEME_SSN"),

             AssignedUser = table1.Field<string>("AssignedUser") 

         }).Distinct().OrderBy(a => (a.Suscriber.IsNotNil() ? 

a.Suscriber : "")).Take(3000);  

1 个答案:

答案 0 :(得分:0)

您正在使用AsEnumerable将查询转换为IQueryable ...基本上这意味着LINQ不会尝试为连接生成SQL代码,并且连接将在C#中完成。

考虑到这一点,你可以尝试将它们作为对象 - 就像这样:

from table1 in searchResult.AsEnumerable()
     join table2 in memberInfo.AsEnumerable()
     on table1.Field<object>("MemeCk") equals
        table2.Field<object>("MEME_CK") 
     select new...

我不确定这是否有效,但可能会这样做