2012-07-27 36 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>(); 
} 

我想找到一個Zoneset有與在MembersList屬性的特定值的區域成員的所有區域。

我知道這樣的事情會工作 - 在這種情況下,我的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做整個事情的方法嗎?我不確定數據庫術語的含義。

回答

0

試試這個 -

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

將不起作用,'e'不能在外部和內部lambda中定義。 – Nuffin 2012-07-27 15:36:13

+0

hummm ... right right r – atiyar 2012-07-27 15:41:19

+0

現在怎麼樣? :) – atiyar 2012-07-27 15:42:13

3

這個小查詢應該是所有您需要:

var myZoneList = myZoneSet.ZoneList 
    .Where(z => z.Any(member => member.MemberWWPN == inputWWPN)) 
    .ToList(); 
+0

謝謝,我會在第二天左右測試一下。如果它工作,我有一些其他代碼重構,我想我可以使用它。 – 2012-07-27 19:24:23

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

我希望這將有助於。