LINQ to Entities无法识别方法'System.Object get_Item(System.String)'Epicor10

时间:2016-06-21 20:00:37

标签: linq

我在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

1 个答案:

答案 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(),因为您可以将所有字符串比较设置为不区分大小写。