C# 芬德尔多重条件

C# 芬德尔多重条件,c#,C#,所以我尝试使用FindAll返回匹配对象的列表。例如,当我只使用一个条件时,它非常有效 patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1) { return p1.WL_ID == patlist[i].wl_id; }); 但是我想使用多个条件,其中一些包含if语句,我不知道如何使用。似乎该格式需要一个return语句,并且该示例来自Microsoft(http://msdn.microsoft.

所以我尝试使用FindAll返回匹配对象的列表。例如,当我只使用一个条件时,它非常有效

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1)
{
   return p1.WL_ID == patlist[i].wl_id;
});
但是我想使用多个条件,其中一些包含if语句,我不知道如何使用。似乎该格式需要一个return语句,并且该示例来自Microsoft(http://msdn.microsoft.com/en-us/library/fh1w7y8z.aspx)只使用一个条件

我可以为每个条件使用多个FindAll方法,也可以自己创建一个循环来扫描所有值,但肯定有一点我没有,对吧?

我不太确定“if loops”是什么,但您可以将它们缝合在一起:

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1)
{
   if(p1.WL_ID != patlist[i].wl_id)
       return false;

   if(otherStuff != 5)
       return false;

   for(var x in p1.stuff)
       if(x == 7)
           return false;

   return true;
});
我不太确定“如果循环”是什么,但您可以将它们缝合在一起:

patientstatus = statuslist.FindAll(delegate(StatusReader.onestatus p1)
{
   if(p1.WL_ID != patlist[i].wl_id)
       return false;

   if(otherStuff != 5)
       return false;

   for(var x in p1.stuff)
       if(x == 7)
           return false;

   return true;
});
请尝试以下操作:

var patientStatus = statusList.Where(p => p
{
    // Put in logic here as you need
    return p.WL_ID == patlist[i].wl_id || p.YourSecondProperty == WhateverYouWantToCheck;
}
请尝试以下操作:

var patientStatus = statusList.Where(p => p
{
    // Put in logic here as you need
    return p.WL_ID == patlist[i].wl_id || p.YourSecondProperty == WhateverYouWantToCheck;
}

你可以考虑像这样的事情

public abstract class Condition
{
    public abstract bool Sutisfied(StatusReader.onestatus status);
}

public class Condition1 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}

public class Condition2 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}
之后可以有一个条件列表,如

List<Condition> conditions = 
     new List<Condition>{new Conditon1(), new Condition2()}

你可以考虑像这样的事情

public abstract class Condition
{
    public abstract bool Sutisfied(StatusReader.onestatus status);
}

public class Condition1 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}

public class Condition2 : Condition
{
   public override bool Sutisfied(StatusReader.onestatus status)  {

      //check for something and return 
   }
}
之后可以有一个条件列表,如

List<Condition> conditions = 
     new List<Condition>{new Conditon1(), new Condition2()}

您的代理只需在与您的条件匹配时返回true,在与您的条件不匹配时返回false。它不必是单行返回语句。您可以在委托中创建布尔值、if语句、for循环以及任何其他您想要的内容,只要它沿所有代码路径返回true或false

因此,您可以根据需要执行任意多个if语句或循环

如果你真的想把它保持为一行,你可以做如下的事情

return (condition1 == condition1) || (condition2 == condition2) || (condition3 == condition3);

您的代理只需在与您的条件匹配时返回true,在与您的条件不匹配时返回false。它不必是单行返回语句。您可以在委托中创建布尔值、if语句、for循环以及任何其他您想要的内容,只要它沿所有代码路径返回true或false

因此,您可以根据需要执行任意多个if语句或循环

如果你真的想把它保持为一行,你可以做如下的事情

return (condition1 == condition1) || (condition2 == condition2) || (condition3 == condition3);

一个委托主体可以包含多个语句;e、 g.
if(p1.PropertyXYZ==17)返回false;返回p1.WL\u ID==patlist[i].WL\u ID
oops对不起,这意味着if语句可能包含多个语句;e、 g.
if(p1.PropertyXYZ==17)返回false;返回p1.WL\u ID==patlist[i].WL\u ID哦对不起,意思是如果语句哈哈