C# 用c语言过滤列表#

C# 用c语言过滤列表#,c#,C#,因此,我有两个列表。一个是律师对象列表,另一个是带有GUID的列表。我首先用值填充GUID列表,然后循环遍历它,然后将其与律师对象的ID字段匹配,以获得具有给定ID的律师 有没有比我的努力更好的方法来实现这一点 List<Attorney> Attorneys = msg.CaseDocument.Attorneys; List<Attorney> CaseDefendantAtt = new List<Attorney>(); List<Guid>

因此,我有两个列表。一个是
律师
对象列表,另一个是带有
GUID
的列表。我首先用值填充
GUID
列表,然后循环遍历它,然后将其与
律师
对象的
ID
字段匹配,以获得具有给定
ID
的律师

有没有比我的努力更好的方法来实现这一点

List<Attorney> Attorneys = msg.CaseDocument.Attorneys;
List<Attorney> CaseDefendantAtt = new List<Attorney>();
List<Guid> AttorneyID = new List<Guid>();

foreach (var s in msg.CaseDocument.Defendants)
{
    AttorneyID.AddRange(s.Attorneys);               

}
foreach (var p in AttorneyID)
{
    var z = Attorneys.FindAll(o => o.AttorneyId == p);
    if (z != null)
    {
        CaseDefendantAtt.AddRange(z);

    }

}
List Attorneys=msg.CaseDocument.Attorneys;
List CaseDefendentatt=新列表();
列表律师ID=新列表();
foreach(msg.CaseDocument.被告中的var s)
{
律师ID.AddRange(s.律师);
}
foreach(律师ID中的var p)
{
VarZ=律师.FindAll(o=>o.AttorneyId==p);
如果(z!=null)
{
CASEANTATT.AddRange(z);
}
}
试试这个

var allAttorneyIds = msg.CaseDocument.Defendants.SelectMany(x=> x.Attroneys);
var caseDefendantsAtt = msg.CaseDocument.Attorneys.Where(x=> allAttorneyIds.Contains(x.AttorneyId)).ToList();
那么

var caseDefendantAtt = msg.CaseDocument.Attorneys.Where(o =>
        msg.CaseDocument.Defendants.SelectMany(d => d.Attorneys).Contains(o.AttorneyId));

也许您可以将您的律师存储在一个[Guid,律师]字典中,然后在字典中查找每个Guid

Dictionary<Guid, Attorney> Attorneys = CreateDictionaryFrom(msg.CaseDocument.Attorneys);
List<Attorney> CaseDefendantAtt = new List<Attorney>();
List<Guid> AttorneyID = new List<Guid>();

foreach (var s in msg.CaseDocument.Defendants)
{
     AttorneyID.AddRange(s.Attorneys);               
}

foreach (var p in AttorneyID)
{
     var z = Attorneys[p];
     if (z != null)
     {
         CaseDefendantAtt.Add(z);
     }
 }
Dictionary Attorneys=CreateDictionaryFrom(msg.CaseDocument.Attorneys);
List CaseDefendentatt=新列表();
列表律师ID=新列表();
foreach(msg.CaseDocument.被告中的var s)
{
律师ID.AddRange(s.律师);
}
foreach(律师ID中的var p)
{
var z=律师[p];
如果(z!=null)
{
加上(z);
}
}
它将提高x1000系数的性能。但您应该注意到,我们假设每个Guid只有一名律师。 不使用字典,我们可以改进您在列表中搜索FirstOrDefault而不是FindAll