【发布时间】:2016-06-21 20:00:36
【问题描述】:
我在 Epicor10 中将一段代码转换为 C#。 板载编译器允许使用此代码,但是当它从我收到的 API 触发时:
LINQ to Entities 无法识别方法“System.Object get_Item(System.String)”方法,并且该方法无法转换为存储表达式。
我已将其范围缩小到 where 子句的这一部分:
&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0
它是这个 sn-p 的一部分:
var ttRcvDtlRow = ttRcvDtl_iterator;
foreach (var Part_iterator in (from Part_Row in Db.Part
where string.Compare(Part_Row.Company, ttRcvDtlRow.Company, true) == 0
&& string.Compare(Part_Row.PartNum, ttRcvDtlRow.PartNum, true) == 0
/*&& string.Compare((string)Part_Row["ShortChar01"] ,"None",true)!=0*/
&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0
select Part_Row))
关于如何修复的建议。我从其他帖子中了解到这种情况发生 b/c linq 正在将其发送到 SQL,并且在翻译(或类似的东西)中存在问题
索引器?
Erp.Tables.Part Part;
foreach (var ttRcvDtl_iterator in (from ttRcvDtl_Row in ttRcvDtl
where (string.Equals(ttRcvDtl_Row.RowMod, IceRow.ROWSTATE_ADDED, StringComparison.OrdinalIgnoreCase) || string.Equals(ttRcvDtl_Row.RowMod, IceRow.ROWSTATE_UPDATED, StringComparison.OrdinalIgnoreCase))
&& String.IsNullOrEmpty(ttRcvDtl_Row.LotNum)
select ttRcvDtl_Row))
谢谢, 杰米
【问题讨论】:
-
Part_Row的类型是什么?你能显示索引器的代码吗?必须有办法将其重写为FirstOrDefault(expression)。 -
请编辑问题。 cmets 中的代码很难阅读。
-
很抱歉,这是新的。
-
现在应该以正确的格式出现
-
尝试用索引器中的 LINQ 语句替换
Part_Row["ShortChar01"]。如果没有看到类模型,很难拼凑出你的代码是什么样子的。下一个问题是,ttRcvDtl是什么?等等。
标签: linq