2012-04-17 57 views
2

我有一个表'资产'和'ListView'(assetCategoriesListView)填充类别。Linq和ListView和包含

我想选择与类别选择所有资产:

Assets myAsset = dbLinqManager.db.Assets.Where(a => assetCategoriesListView.CheckedIndices.Contains(a.Category)).First(); 

但似乎包含不能使用。有谁知道解决方案?

+1

您可以使用'Contains',但只能使用简单类型的列表:http://wekeroad.com/2008/02/27/creating-in-queries-with-linq-to-sql/ – mellamokb 2012-04-17 00:59:42

+2

什么你有错误吗? – SLaks 2012-04-17 01:04:13

回答

1

你被困在一个不合时宜的时代。 ListView类的日期从.NET 1.0开始,即泛型变得可用之前的黑暗日子。 CheckedIndices属性的类型为ListView.CheckedIndexCollection,它只实现IEnumerable,而不是IEnumerable <>。这就是为什么Contains()不起作用。

通常可以使用Cast()扩展方法修复它。但CheckedIndices包含整数,而不是对象。 CheckedItems包含ListViewItems。您计划如何将它们映射到“资产”的方式并不明确。注重保持数据与视图分离。

+0

所以我试试这个: Assets test = dbLinqManager.db.Assets.Where(a =>(assetCategoriesListView.CheckedIndices.Cast ())。Contains(a.Category))。First(); 但我仍然有一个错误:s – Ziboo 2012-04-18 17:51:41

+0

你错过了我的第二段,你试图将整数映射到类别。 – 2012-04-18 18:07:03

+0

但myCategories是int – Ziboo 2012-04-18 18:15:25