使用实体对象集合搜索数据库

时间:2009-10-22 17:16:22

标签: c# asp.net entity-framework linq-to-entities

我确信这是直截了当的,但我对实体查询很陌生,之前可能已被问过。

我需要搜索我的数据库中的所有商家,他们的类别存在于我已建立的类别集合中

IList<businessCategory> busCatList;

busCatList.Add(businessCategory.CreatebusinessCategory(1,"Tourism"));
busCatList.Add(businessCategory.CreatebusinessCategory(2,"Accomidation"));
busCatList.Add(businessCategory.CreatebusinessCategory(3,"Entertainment"));
busCatList.Add(businessCategory.CreatebusinessCategory(4,"Bar"));
busCatList.Add(businessCategory.CreatebusinessCategory(5,"Club"));

var items = Data.DBEntities.business.Where(b.businessCategory.Contains(busCatList) );

我知道查询的语法是错误的,但基本上我的查询是什么,它可以提取所有业务,其中的类别与busCatLsit中的任何类别相匹配

在我的数据库中,一个企业可以链接到许多类别

在SQL中我会做

SELECT name  FROM business
join businessCategoryRlnshp on businessCategoryRlnshp.businessID = business.ID
where categoryID in (1,2,3)

2 个答案:

答案 0 :(得分:0)

只是想在这里读你的想法;)

var items = busCatList.Where(businessCategory => b.businessCategory.Contains(businessCategory));

答案 1 :(得分:0)

我无法想象linq中的一个很好的解决方案 - 我的意思是除了某种执行查询之外 - 每个业务类别一个。

但是在SQL Server 2008中有一个新功能 - 将表变量传递给存储过程。这可以通过传递带有1个DataTable作为参数的DataSet来从代码中完成。 您当然可以为IEnumerable编写一个扩展方法,将其转换为类似于ToList()或ToDictionary()方法的DataSet。 存储过程返回实体可以在EntityFramework 1.0中使用,因此理论上这应该可以使拼图点击。

PS&GT;还有一个使用E-SQL和可能的查询构建器方法的解决方案。