我查了很多有这个错误的帖子,但没有一个有这个特殊的问题。 (另外我是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);
答案 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...
我不确定这是否有效,但可能会这样做