我有IEnumerable<RuleSelection>这些属性:
public class RuleSelection{
public int RuleId { get; set;}
public int? CriteriaId { get; set; }
public int? CriteriaSourceId{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
RuleIdin RuleSelection并不是唯一的.
我可以写一个linq查询来规范化这些IEnumerable<Rule>将是:
public class Rule{
public int RuleId { get; set; }
public IEnumerable<int> Criteria { get; set; }
public IEnumerable<int> CriteriaSource { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Rule.RuleId将是唯一的和属性Criteria,CriteriaSource并将分别包括所有CriteriaId's和CriteriaSourceId's RuleId.
Jon*_*eet 10
这听起来像你想要的东西:
var rules = selections.GroupBy(rs => rs.RuleId)
.Select(g => new Rule {
RuleId = g.Key,
Criteria = g.Select(rs => rs.CriteriaId)
.Where(c => c != null)
.Select(c => c.Value)
.ToList(),
CriteriaSource = g.Select(rs => rs.CriteriaSourceId)
.Where(c => c != null)
.Select(c => c.Value)
.ToList(),
});
Run Code Online (Sandbox Code Playgroud)