2012-07-27 5 views
1

나는이 수업을 :LINQ를 사용하여 목록 목록에서 내부 목록을 검색 할 수 있습니까?

public class ZoneMember 
    // a zone member is a member of a zone 
    // zonemembers have ports, WWPNs, aliases or all 3 
{ 
    private string _Alias = string.Empty; 
    public string MemberAlias {get{return _Alias;} set{_Alias = value; } } 
    private FCPort _Port = null; 
    public FCPort MemberPort { get { return _Port; } set { _Port = value; } } 
    private string _WWPN = string.Empty; 
    public string MemberWWPN { get { return _WWPN; } set { _WWPN = value; } } 
    private bool _IsLoggedIn; 
    public bool IsLoggedIn { get { return _IsLoggedIn; } set { _IsLoggedIn = value; } } 
    private string _FCID; 
    public string FCID {get{return _FCID;} set{ _FCID=value; } } 
} 

public class Zone 
{ 
    public List<ZoneMember> MembersList = new List<ZoneMember>(); 
    private string _ZoneName; 
    public string zoneName{ get{return _ZoneName;} set{_ZoneName=value;} } 

    public Zone(string n) { zoneName=n; } 

}

public class ZoneSet 
{  
    private string _ZoneSetName; 
    private int _VSANNum; 
    public string ZoneSetName{get{ return _ZoneSetName;} set{_ZoneSetName=value;} } 
    public int VSANNum{ get{ return _VSANNum;} set{_VSANNum=value;} } 
    public bool isActive; 
    public List<Zone> ZoneList = new List<Zone>(); 
} 

내가 MembersList의 속성에 대한 특정 값을 갖는 영역 구성원을 가지고 성 존의 모든 영역을 찾고 싶어요.

I는 다음과 같이 작동합니다 알고있다 - 나는 WWPN 속성에서 검색하고,이 경우 :

// assumes myZoneSet has already been instantiated ad has zones in it 
// and inputWWPN in the select statement has the value we want 

List<Zone> myZoneList = new List<Zone>(); 

foreach (Zone z in myZoneset) 
{ 
var zm=null; 

     zm = from member in z.MembersList where member.MemberWWPN == inputWWPN select member; 
    // if we find a matching member, add this zone to the list 
    if (zm != null) 
    { myZoneList.Add(z); 
    } 
} 

전체 일을 LINQ를 사용하는 방법이 있나요? 나는 데이터베이스 용어로 사용되는 용어가 무엇인지 모릅니다. -

List<Zone> listOfZone = zoneSet.ZoneList.Where(e => e.Any(p => p.MemberWWPN == inputWWPN)).ToList(); 

답변

0

이 시도 :

+0

작동하지 않을 경우 'e'는 외부 및 내부 람다 모두에서 정의 될 수 없습니다. – Nuffin

+0

hummm ... right u r – atiyar

+0

어때? :) – atiyar

3

이 작은 쿼리는 모두 당신이 필요로해야한다.

+0

감사합니다. 다음날에 테스트 해 보겠습니다. 그것이 작동한다면, 나는 리팩토링에 대한 다른 코드를 가지고 있으며 이것을 사용할 수 있다고 생각합니다. –

0
myZoneList =myZoneSet.SelectMany(z => z.MembersList).Where(m => m.MemberWWPN == "somestring").ToList(); 

난이 도움이되기를 바랍니다

var myZoneList = myZoneSet.ZoneList 
    .Where(z => z.Any(member => member.MemberWWPN == inputWWPN)) 
    .ToList(); 
관련 문제