使用LINQ to Entities查询中“应用程序设置”中指定的StringCollection
本文关键字:StringCollection 设置 to LINQ Entities 查询 使用 应用程序 | 更新日期: 2023-09-27 18:23:52
在我的应用程序中,我有String.Collections.Specialized.StringCollection类型的Property Setting。它包含一系列客户代码,如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无法识别Contains to Entities,并显示类似于以下消息:
"LINQ to Entities无法识别Contains…方法。"
如何修改上面的代码以避免此错误?
较短的路径是
myProperties.Settings.Default.CustomersToExclude.Cast<string>().Contains(blah);
对于任何集合本身不支持LINQ的情况,这都是一个方便的技巧。
由于您的问题被标记为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);
这在一个相关的问题中得到了回答。EF4显然直接支持Contains,所以这将是我首选的解决方案…:)