在我的应用程序中,我有Property Setting,它的类型为String.Collections.Specialized.StringCollection。它包含一系列客户代码,例如MSFT,SOF,IBM等。我正在尝试在where子句中的Linq-to-Entities查询中使用它:
var ShippedOrders = dbcontext.Orders
.Where(s=>(s.Status.Description.Equals("Shipped") && !Properties.Settings.Default.CustomersToExclude.Contains(s.CustomerCode)));
此操作失败,因为Linq-to-Entities无法识别包含类似于
的消息的包含“LINQ-to-Entities无法识别方法包含......”
如何修改上述代码以避免此错误?
答案 0 :(得分:12)
较短的路径是
myProperties.Settings.Default.CustomersToExclude.Cast<string>().Contains(blah);
对于任何集合本身不支持LINQ的情况,这是一个方便的技巧。
答案 1 :(得分:2)
由于您的问题被标记为C#4,请改用List<string>
(StringCollection
是古老的)并且您的查询应该有效。您还应该在查询之外解析列表引用:
List<string> customersToExclude = ..
var ShippedOrders = dbcontext.Orders
.Where(s=>(s.Status.Description.Equals("Shipped")
&& !customersToExclude.Contains(s.CustomerCode)));
修改强>
只需将您的客户复制到数组并使用:
var customerstoExclude = new string[Properties.Settings.Default.CustomersToExclude.Count];
myProperties.Settings.Default.CustomersToExclude.CopyTo(customerstoExclude, 0);
答案 2 :(得分:1)
这是在related question中回答的。但是EF4显然支持直接包含,所以这是我最喜欢的解决方案......:)