2014-09-03 76 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