2014-09-03 44 views
0

我一直在努力尝试让这个工作,我的大脑被枪杀......希望有人可以帮忙。Linq在IN使用方法的语法

我有一个名为Company的表,它是查询返回的主要实体。公司表通过表CompanyCategory链接到名为Category的表。类别表有两个与这里相关的字段:名称和含义。这些字段在一行中包含相同的数据... ie ... Name =“Marketing”和含义=“MARKETING”。这允许我通过含义进行查询,而显示名称可能在将来发生变化。我将始终通过含义查询类别表,然后显示名称。

由于公司可以包含1到多个类别,有时候我想返回所有拥有一组类别的公司......说......所有与营销或公共关系相关的公司。以下是我现在正在查询的所有公司仅返回我想要的数据的情况。

IQueryable<ICompanyModel> q = base.Context.Set<KD.CompanyAdventures.Data.Implementation.Company>() 
    .Include(x => x.Address.City.FirstAdminDivision) 
    .Include(x => x.CompanyBioInfoes) 
    .Select(x => new CompanyModel 
    { 
     CompanyId = x.CompanyId, 
     Name = x.Name, 
     BusinessPhone = x.BusinessPhone, 
     PrimaryEmail = x.PrimaryEmail, 
     WebsiteUrl = x.WebsiteUrl, 
     LogoUrl = x.LogoUrl, 
     Address = new AddressModel 
     { 
      AddressId = x.AddressId, 
      Address1 = x.Address.Address1, 
      Address2 = x.Address.Address2, 
      PostalCode = x.Address.PostalCode, 
      City = new CityModel 
      { 
       CityId = x.Address.City.CityId, 
       Name = x.Address.City.Name, 
       FirstAdminDivision = new FirstAdminDivisionModel 
       { 
        FirstAdminDivisionId = x.Address.City.FirstAdminDivision.FirstAdminDivisionId, 
        Name = x.Address.City.FirstAdminDivision.Name 
       } 
      } 
     } 
    }); 

我传递一个List<string>的方法(GetCompanies)具有此LINQ查询,我需要这是由在传递类别含义该列表返回的公司进行筛选。我已经能够得到这个在测试使用了2名简单的名单运作下(其中表1 =所有员工(我的妻子和孩子的名字)和表2是对我的孩子只是名称):

IQueryable<string> adultEmployees = employees.Where(emp => !kids.Contains(emp.ToString())).AsQueryable(); 

但我我无法得到这与公司和类别示例一起工作,因为我无法弄清楚如何钻取复杂对象的含义.... ie ...不列出o f字符串。通过LINQ查询使用

对象类如下所示:

CompanyModel [ CompanyId, CompanyName, List<CategoryModel> ] 
CategoryModel [ CategoryId, Name, Meaning ] 

任何帮助是极大的赞赏。

回答

1

假设meanings是包含“营销”和“公共关系”的列表。如果我理解正确的这个,你可以得到有CategoryModelsMeaning等于‘市场营销’或‘公关’像这样的公司:

companies.Where(c => c.CategoryModels.Any(cm => meanings.Contains(cm.Meaning))) 
+0

这正是我的意思,正是我需要的。非常感谢! – user1011627 2014-09-03 14:22:04