我一直在努力让这个人上班,我的大脑被枪杀......希望有人可以帮忙。
我有一个名为Company的表,它是从查询返回的主要实体。公司表通过表CompanyCategory链接到名为Category的表。类别表有2个与此相关的字段:名称和含义。这些字段在一行中包含相同的数据...即... Name =“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>
传递给具有此LINQ查询的方法(GetCompanies),我需要过滤那些传入的类别含义列表返回的公司。我已经能够使用以下(其中列表1 =所有员工(我的妻子和孩子的名字),列表2只是我孩子的名字),使用以下2个简单列表进行测试:
IQueryable<string> adultEmployees = employees.Where(emp => !kids.Contains(emp.ToString())).AsQueryable();
但是我无法将其与公司和类别示例一起使用,因为我无法弄清楚如何深入研究复杂对象的含义......即......不是字符串列表。< / p>
LINQ查询使用的对象类如下所示:
CompanyModel [ CompanyId, CompanyName, List<CategoryModel> ]
CategoryModel [ CategoryId, Name, Meaning ]
非常感谢任何帮助。
答案 0 :(得分:1)
假设meanings
是一个包含&#34; marketing&#34;的列表。和&#34;公共关系&#34;。如果我理解正确,您可以让公司CategoryModels
Meaning
等于&#34;营销&#34;或者&#34;公共关系&#34;像这样:
companies.Where(c => c.CategoryModels.Any(cm => meanings.Contains(cm.Meaning)))