【问题标题】:How to solve generic predicate in where clause item?如何解决where子句项中的泛型谓词?
【发布时间】:2012-11-22 13:21:52
【问题描述】:

我在where子句“_list.Where(whereClause)”遇到3个错误如何解决?

错误 1
“System.Collections.Generic.List”不包含“Where”的定义和最佳扩展方法重载“System.Linq.ParallelEnumerable”。 Where(System.Linq.ParallelQuery, System.Func)' 有一些无效参数
错误 2 实例参数:无法从 'System .Collections.Generic.List' 到 'System.Linq.ParallelQuery'
错误 3 参数 2:无法从 'System.Func' 到 'System.Func'


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FuncMetodunuTaniyalim3
{
    public class Search<T> where T : class
    {
         private  List<DataModel.Customer> _list;

         public Search()
         {
             _list = new List<DataModel.Customer>();
         }
        public int Find(Func<T, bool> whereClause)
        {
            return _list.IndexOf(_list.Where<T>(whereClause).FirstOrDefault<T>());
        }
    }

    //Repository
    public class DataModel
    {
        private IEnumerable<Customer> customers;

        public List<Customer> Customers
        {
            get { return customers.ToList(); }

        }


        public DataModel()
        {
            customers = new[] { new Customer(){ Id=1, Name="cbfghg", SurName="hfh", Age=29, Dept=0, Income=100},
                                new Customer(){ Id=2, Name="hfghfhf", SurName="erhfghfhfhem", Age=0,Dept=45, Income=300},
                                new Customer(){ Id=3, Name="hgfhgfhf", SurName="balhfghgfhfgh", Age=33, Dept=20, Income=150}};
        }

        //Model
        public class Customer
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string SurName { get; set; }
            public int Age { get; set; }
            public int Income { get; set; }
            public int Dept { get; set; }

            public Customer()
            {

            }
        }
    }
}

【问题讨论】:

    标签: c# c#-4.0 generics func


    【解决方案1】:

    您的列表是List&lt;DataModel.Customer&gt;,而您的谓词是Func&lt;T, bool&gt;。将谓词类型更改为 Func&lt;DataModel.Customer, bool&gt; 或将列表类型更改为 List&lt;T&gt;

    【讨论】:

      【解决方案2】:

      您的 Search 类包含 List&lt;Customer&gt;。可能你的意思是使用List&lt;T&gt;

      public class Search<T> where T : class
      {
          private List<T> _list;
      
          public Search()
          {
              _list = new List<T>();
          }
          public int Find(Func<T, bool> whereClause)
          {
              return _list.IndexOf(_list.Where<T>(whereClause).FirstOrDefault<T>());
          }
      }
      

      【讨论】:

        【解决方案3】:

        你不能这样做,因为List&lt;DataModel.Customer&gt; 实现了IEnumerable&lt;DataModel.Customer&gt; 查看方法文档:http://msdn.microsoft.com/en-us/library/bb534803.aspx 或许您希望 _list as List&lt;T&gt; 那里?

        【讨论】:

          猜你喜欢
          • 2022-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-12
          • 2018-12-26
          • 1970-01-01
          相关资源
          最近更新 更多