繁体   English   中英

Linq 查询和潜在的自加入/分组方式

[英]Linq query and potential self join/group by

可悲地患有大脑衰退。 我有以下情况:

void Main()
{
    List<CaseBase> caseList = new List<UserQuery.CaseBase>();
    caseList.Add(new CaseBase() {CaseID = 1, CaseSequence = 1, CaseStatus = 1});
    caseList.Add(new CaseBase() {CaseID = 1, CaseSequence = 2, CaseStatus = 2});
    caseList.Add(new CaseBase() {CaseID = 2, CaseSequence = 1, CaseStatus = 1});

    var cases = caseList.Where(x => new List<int> {2}.Contains(x.CaseStatus));
    
}

// Define other methods and classes here
public class CaseBase
{ 
    public int CaseID {get;set;}
    public int CaseSequence {get;set;}
    public int CaseStatus {get;set;}
}

返回预期的

案例ID 案例序列 案例状态
1 2 2

我想要的是所有具有相同 ID 的案例,其中一个的状态为 2。

案例ID 案例序列 案例状态
1 1 1
1 2 2

这应该很简单,但我正在努力寻找一个简单的解决方案。

有几种方法可以继续:

  1. 您可以通过CaseID和 select 将匹配组组合起来,然后将它们分开:

     var cases = caseList.GroupBy(c => c.CaseID).Where(cg => cg.Any(c => new List<int> { 2 }.Contains(c.CaseStatus))).SelectMany(cg => cg);
  2. 您可以找到所需的CaseID ,然后获取所有匹配的案例:

     var wantedCaseIDs = caseList.Where(c => new List<int> { 2 }.Contains(c.CaseStatus)).Select(c => c.CaseID).ToHashSet(); var cases = caseList.Where(c => wantedCaseIDs.Contains(c.CaseID));

或者你可能想这样做:

void Main()
{
    List<CaseBase> caseList = new List<UserQuery.CaseBase>();
    caseList.Add(new CaseBase() { CaseID = 1, CaseSequence = 1, CaseStatus = 1 });
    caseList.Add(new CaseBase() { CaseID = 1, CaseSequence = 2, CaseStatus = 2 });
    caseList.Add(new CaseBase() { CaseID = 2, CaseSequence = 1, CaseStatus = 1 });
    
    var cases = caseList.Where(x => new List<int> { 2 }.Contains(x.CaseStatus))
        .Join(caseList,x => x.CaseID,y => y.CaseID,(x,y) => new {x,y})
        .Select(z => z.y)
        .Dump();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM