我有一段代码在Epicor10中转换为C#。板载编译器允许此代码,但当它从我收到的API触发时:
LINQ to Entities无法识别方法“”System.Object get_Item(System.String)“”方法,并且此方法无法转换为存储表达式。“”
我把它缩小到where子句的这一部分:
&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0它是以下代码段的一部分:
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))谢谢,JM
发布于 2016-06-22 04:09:50
“我从其他帖子中了解到,这种情况会发生b/c linq正在将此信息发送到SQL,翻译过程中存在问题。”
这正是正在发生的事情。EF不知道如何将string.Compare转换为SQL方法。
&& string.Compare((string)Part_Row["ShortChar01"] ,(string)"None",true)!=0应该是
&& ((string)Part_Row["ShortChar01"]).ToLower() != "none"根据您的SQL Server设置,您甚至不需要ToLower(),因为您可以在默认情况下将所有字符串比较设置为不区分大小写。
https://stackoverflow.com/questions/37953550
复制相似问题