使用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…方法。"

如何修改上面的代码以避免此错误?

使用LINQ to Entities查询中“应用程序设置”中指定的StringCollection

较短的路径是

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,所以这将是我首选的解决方案…:)

相关文章:
  • 没有找到相关文章