C# 用LINQ过滤必要的数据
我一直在和林克玩,但有一件事我似乎做不到。。情况是这样的。。假设你有C# 用LINQ过滤必要的数据,c#,linq,C#,Linq,我一直在和林克玩,但有一件事我似乎做不到。。情况是这样的。。假设你有 public class Job { public DateTime? CreatedDate { get; set; } } public class Company { public string Name { get; set; } public List<Job> Contract { get; set; } } 公共类作业 { 公共日期时间?CreatedDate{get;se
public class Job
{
public DateTime? CreatedDate { get; set; }
}
public class Company
{
public string Name { get; set; }
public List<Job> Contract { get; set; }
}
公共类作业
{
公共日期时间?CreatedDate{get;set;}
}
公营公司
{
公共字符串名称{get;set;}
公共列表契约{get;set;}
}
现在我想做的是填充一个公司列表,然后只得到在中创建了合同的公司。。比如说一月份。。像这样的
String[] MonthName = { "January", "February", "March", "April", "May", "June", "July", "Agust", "September", "October", "November", "December" };
List<Company> Companies = PopulateData();
List<Company> ValidCompany = Companies.Where(CompanyFilter => CompanyFilter.Contract.Any(ContractFilter => MonthName[ContractFilter.CreatedDate.Value.Month - 1] == "January")).ToList();
String[]MonthName={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};
上市公司=PopulateData();
列出有效公司=公司。其中(CompanyFilter=>CompanyFilter.Contract.Any(ContractFilter=>MonthName[ContractFilter.CreatedDate.Value.Month-1]==“一月”)。ToList();
这很好,但它会返回所有合同,即使有些合同不在“1月份”。我是否遗漏了一个步骤?原始帖子:
List<Company> ValidCompany = (
from c in Companies
let janContracts = c.Contracts
.Where(con => MonthName[con.CreatedDate.Value.Month - 1] == "January")
where janContracts.Any()
select new Company
{
Name = c.Name,
Contracts = janContracts.ToList()
}).ToList();
列出有效公司=(
来自c公司
让我们来看看合同
.Where(con=>MonthName[con.CreatedDate.Value.Month-1]==“一月”)
任何
选择新公司
{
Name=c.Name,
Contracts=janContracts.ToList()
}).ToList();
更新:使用扩展方法
var janCompanies = Companies.Select(c=>
new Company
{
Name = c.Name,
Contracts = c.Contracts
.Where(con => MonthName[con.CreatedDate.Value.Month - 1] == "January")
.ToList()
});
List<Company> ValidCompany = janCompanies
.Where(c=>c.Contracts.Any())
.ToList();
var janCompanies=公司。选择(c=>
新公司
{
Name=c.Name,
合同=c.合同
.Where(con=>MonthName[con.CreatedDate.Value.Month-1]==“一月”)
托利斯先生()
});
列出有效公司=公司
.Where(c=>c.Contracts.Any())
.ToList();
原始帖子:
List<Company> ValidCompany = (
from c in Companies
let janContracts = c.Contracts
.Where(con => MonthName[con.CreatedDate.Value.Month - 1] == "January")
where janContracts.Any()
select new Company
{
Name = c.Name,
Contracts = janContracts.ToList()
}).ToList();
列出有效公司=(
来自c公司
让我们来看看合同
.Where(con=>MonthName[con.CreatedDate.Value.Month-1]==“一月”)
任何
选择新公司
{
Name=c.Name,
Contracts=janContracts.ToList()
}).ToList();
更新:使用扩展方法
var janCompanies = Companies.Select(c=>
new Company
{
Name = c.Name,
Contracts = c.Contracts
.Where(con => MonthName[con.CreatedDate.Value.Month - 1] == "January")
.ToList()
});
List<Company> ValidCompany = janCompanies
.Where(c=>c.Contracts.Any())
.ToList();
var janCompanies=公司。选择(c=>
新公司
{
Name=c.Name,
合同=c.合同
.Where(con=>MonthName[con.CreatedDate.Value.Month-1]==“一月”)
托利斯先生()
});
列出有效公司=公司
.Where(c=>c.Contracts.Any())
.ToList();
您的查询中没有任何内容会过滤合同(Company.Contract
),只有公司本身。您需要单独执行此操作,可能需要通过.Contract
上的Where
如果您正在将数据从LINQ加载到SQL,那么可能是uesful
如果您想要范围内的所有合同,而不考虑公司,则可能选择many
:
var qry = from company in Companies
from contract in company.Companies
where contract.CreatedDate.Value.Month == ... etc
select new {Company = company, Contract = contract};
您的查询中没有任何内容会过滤合同(
Company.Contract
)——只有公司本身。您需要单独执行此操作,可能需要通过.Contract
上的Where
如果您正在将数据从LINQ加载到SQL,那么可能是uesful
如果您想要范围内的所有合同,而不考虑公司,则可能选择many
:
var qry = from company in Companies
from contract in company.Companies
where contract.CreatedDate.Value.Month == ... etc
select new {Company = company, Contract = contract};