我确信这是直截了当的,但我对实体查询很陌生,之前可能已被问过。
我需要搜索我的数据库中的所有商家,他们的类别存在于我已建立的类别集合中
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)
答案 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和可能的查询构建器方法的解决方案。