Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用LINQ过滤必要的数据_C#_Linq - Fatal编程技术网

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};