我在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
答案 0 :(得分:0)
“我从其他帖子中了解到这种情况发生了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(),因为您可以将所有字符串比较设置为不区分大小写。