如何使用这个公共IEnumerable <t> Find(表达式<func <t,bool =“”>&gt;谓词)?</func <t,> </t>

时间:2012-04-12 09:47:44

标签: linq-to-sql predicate

如何正确使用下面的代码?

public IEnumerable<T> Find(Expression<Func<T, bool>> predicate)

我需要返回一个特定对象的IEnumerable,但我需要将集合对象转换为Queryable并将结果再次转换为List?

下面是我的实现,我不知道这是否正确,我正在使用代码对通用存储库进行单元测试。

 public IEnumerable<tbl_SBAem_Attendee> Find(Expression<Func<tbl_SBAem_Attendee, bool>> predicate)
        {
            var listtblsbaemAttendee = new  List<tbl_SBAem_Attendee>();
            IEnumerable<tbl_SBAem_Attendee> enumerableAttendee=new List<tbl_SBAem_Attendee>();


            for (var i = 0; i < 10; i++)
            {
                var tblSbAemAttendee = new tbl_SBAem_Attendee
                                           {
                                               AT_AID = i,
                                               AT_Address = "Address1" + i,
                                               AT_Address2 = "Address2" + i,
                                               AT_City = "City",
                                               AT_Email = "rene_florendo2005@yahoo.com.ph",
                                               AT_EventID = null,
                                               AT_FirstName = "Rene" + i,
                                               AT_LastName = "Florendo" + i,
                                               AT_GID = null,
                                               AT_Org = "Rene's Club",
                                               AT_Phone = "888-8888",
                                               AT_Phone2 = "999-8888",
                                               AT_RegID = null,
                                               AT_SendInfo = null,
                                               AT_State = "NJ",
                                               AT_Title = "Mr",
                                               AT_Zip = "4102",
                                               AT_date = null,
                                               AT_opt1 = "option1",
                                               AT_opt2 = "option2",
                                               AT_opt3 = "option3",
                                               AT_opt4 = "option4",
                                               AT_opt5 = "option5",
                                               AT_opt6 = "option6",
                                               AT_userID = null,
                                               AttendeeID = 1
                                           };
                listtblsbaemAttendee.Add(tblSbAemAttendee);
            }
            var result= listtblsbaemAttendee.AsQueryable().Where(predicate);
            return result.ToList();
        }

非常感谢任何帮助或建议。 谢谢。

1 个答案:

答案 0 :(得分:1)

如果我没错:

Where(Expression<Func<T, bool>>)是IQueryable

的扩展程序

Where(Func<T, bool>>)是IEnumerable的扩展名。

因此,尝试更改函数的参数类型(或重载它),并且您不需要强制转换为Queryable来使用谓词(不要认为您需要表达式)

修改

另一种方法是编译表达式(var predicatefunc = predicate.Compile()),并在“Where”子句中使用它。但我认为这不是最好的方式......