C# LINQ Query SelectMany()返回空值
我有这些课程。为了简单起见,我省略了与问题无关的成员。我想找到包含WWPN的给定字符串值的成员的所有区域。下面的LINQ可以工作,但是对于不匹配的区域,结果也包含null。我的其他尝试要么给了我区域成员自己,要么给了我一个嘘声。有没有一种方法可以在不获取空值的情况下执行此操作?我不需要使用containsMemberWpn()类成员C# LINQ Query SelectMany()返回空值,c#,C#,我有这些课程。为了简单起见,我省略了与问题无关的成员。我想找到包含WWPN的给定字符串值的成员的所有区域。下面的LINQ可以工作,但是对于不匹配的区域,结果也包含null。我的其他尝试要么给了我区域成员自己,要么给了我一个嘘声。有没有一种方法可以在不获取空值的情况下执行此操作?我不需要使用containsMemberWpn()类成员 public class Zone { .... public List<ZoneMember> MembersList =
public class Zone
{ ....
public List<ZoneMember> MembersList = new List<ZoneMember>();
}
public class ZoneMember
{
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; } }
}
public class CiscoVSAN
{
....
public List<Zone> ActiveZoneset = new List<Zone>();
....
}
public Zone ContainsMemberWWPN(string wwpn)
{
var contained =
this.MembersList.FirstOrDefault(m => m.MemberWWPN.Contains(wwpn));
if (contained != null) { return this }
else { return null; }
}
//find all the zones that contain the input string
// this returns the zones that match
// but selection3 also has null values for zones that don't match
var selection3 = VSANDictionary.SelectMany(vsan => vsan.Value.ActiveZoneset.ZoneList).Select(z => z.ContainsMemberWWPN(zonemember));
公共类区域
{ ....
公共列表成员列表=新列表();
}
公共类区域成员
{
私有字符串_WWPN=string.Empty;
公共字符串成员WWPN{get{return}WWPN;}set{{uwwpn=value;}}
私人布卢·伊斯洛格丁;
public bool IsLoggedIn{get{return{u IsLoggedIn;}set{{u IsLoggedIn=value;}}
}
公共类西斯科万
{
....
public List ActiveZoneset=new List();
....
}
公共区域包含MBERWWPN(字符串wwpn)
{
包含的变量=
this.MembersList.FirstOrDefault(m=>m.MemberWWPN.Contains(wwpn));
如果(包含!=null){返回此}
else{return null;}
}
//查找包含输入字符串的所有区域
//这将返回匹配的区域
//但是selection3对于不匹配的区域也有空值
var selection3=VSANDictionary.SelectMany(vsan=>vsan.Value.ActiveZoneset.ZoneList)。Select(z=>z.containsMemberWpn(zonemember));
过滤掉空项:
var selection3 = VSANDictionary
.SelectMany(vsan => vsan.Value.ActiveZoneset.ZoneList)
.Select(z => z.ContainsMemberWWPN(zonemember))
.Where(m=> m != null)
完美的谢谢这比我提出的解决方案要简洁得多。