Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ Query SelectMany()返回空值_C# - Fatal编程技术网

C# LINQ Query SelectMany()返回空值

C# LINQ Query SelectMany()返回空值,c#,C#,我有这些课程。为了简单起见,我省略了与问题无关的成员。我想找到包含WWPN的给定字符串值的成员的所有区域。下面的LINQ可以工作,但是对于不匹配的区域,结果也包含null。我的其他尝试要么给了我区域成员自己,要么给了我一个嘘声。有没有一种方法可以在不获取空值的情况下执行此操作?我不需要使用containsMemberWpn()类成员 public class Zone { .... public List<ZoneMember> MembersList =

我有这些课程。为了简单起见,我省略了与问题无关的成员。我想找到包含WWPN的给定字符串值的成员的所有区域。下面的LINQ可以工作,但是对于不匹配的区域,结果也包含null。我的其他尝试要么给了我区域成员自己,要么给了我一个嘘声。有没有一种方法可以在不获取空值的情况下执行此操作?我不需要使用containsMemberWpn()类成员

  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)

完美的谢谢这比我提出的解决方案要简洁得多。