比如有个Person类,有name、sex等属性,除了For Each还有什么方向查找符合某项属性的记录?

解决方案 »

  1.   

    Person person=list.Find(p=>p.name=="csdn");
      

  2.   

    .NET 2.0下有没有方法?我是Visual Studio 2005。
      

  3.   

    Linq查询
    List <Student> listStudent=new  List <Student>();
    IEnumerable<string> listStudentQuery = from item in listStudent
                                      where item.ID== "1"
                                      select item.NAME;
      

  4.   

    那就用委托,2.0的应该有支持委托的Find方法
      

  5.   

    private static bool FindPerson(Person p)
        {
            if (p.Name=="aaa")
            {
                return true;
            }
            else
            {
                return false;
            }
        }Person p= list.Find(FindPerson);
      

  6.   

    没有Lamda表达式,LINQ就用
    DataTable.Select
      

  7.   

    2.0中有FindAll方法啊,传进一个委托即可,一般都是用匿名方法:List<Person> list = new List<Person>();
    List<Person> result = list.FindAll(delegate(Person p){ return p.name == "John"; });//寻找name为John的匹配项
      

  8.   

    用匿名方法就可以了,参考9楼,把"John"换成你要传入的局部变量
      

  9.   

     /// <summary>
            /// 从泛型集合中按指定条件获取对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="source"></param>
            /// <param name="fieldName"></param>
            /// <param name="target"></param>
            /// <returns></returns>
            internal static T getObjectFromCaches<T>(List<T> source, string fieldName, object target) where T : BaseEntity
            {
                return source.Find(new Predicate<T>((c) => { return CompareObject(c, fieldName, target); }));
            }        /// <summary>
            /// 查找某对象中的某个字段值是否与比较值一致
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="obj">比较对象</param>
            /// <param name="fieldName">字段名</param>
            /// <param name="target">目标值</param>
            /// <returns></returns>
            internal static bool CompareObject<T>(T obj, string fieldName, object target) where T : BaseEntity
            {
                Type type = obj.GetType();            //读取字段信息
                FieldInfo fldInfo = type.GetField(fieldName);
                if (fldInfo == null) return false;            //获取字段值
                object fldValue = fldInfo.GetValue(obj);
                if (fldValue == null) return false;            bool result = (fldValue.Equals(target));            return result;
            }
    试试这个,采用反射方式根据字段名称检测数据
      

  10.   

     Person p = new Person();
                ClassHelper<Person>.FindClass(p, "Name", OperationEnum.EqualTo, "aaa");    public class ClassHelper<T>
        {
            public static bool FindClass(T t, string fieldName, OperationEnum operation,object fieldValue)
         {
             bool result = false;
             Type type = typeof(T);
             PropertyInfo pi = type.GetProperty(fieldName);
             if (null == pi) return false;
             object obj = pi.GetValue(t,null);
             switch (operation)
             {
                 case OperationEnum.EqualTo:
                     result = obj == fieldValue;
                     break;
                 case OperationEnum.NotEqualTo:
                     result = obj == fieldValue;
                     break;
                 default:
                     break;
             }
             return result;
         }
        }    public enum OperationEnum
        {
            EqualTo,
            NotEqualTo
        }
      

  11.   

    List<T>.Find , List<T>.FindAll , List<T>.Exists , List<T>.FindLast 
    List<Person> lst= new List<Person> ();
    List<Person> l= lst.FindAll(delegate(Person p){ 
    if (p.Name.StartsWith("")) 
    return true; 
    return false; 
    });