0

以下のコードを正しく使用するにはどうすればよいですか?

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();
        }

ヘルプや提案は大歓迎です。ありがとうございました。

4

1 に答える 1

1

私が間違っていない場合:

Where(Expression<Func<T, bool>>)IQueryableの拡張機能です

しかし

Where(Func<T, bool>>)IEnumerableの拡張機能です。

したがって、関数のパラメータータイプを変更する(またはオーバーロードする)ようにしてください。述語を使用するためにQueryableにキャストする必要はありません(式が必要だとは思わないでください)。

編集

もう1つの方法は、式(var predicatefunc = predicate.Compile())をコンパイルし、それを「Where」句で使用することです。しかし、それが最善の方法ではないと思います...

于 2012-04-12T09:53:50.227 に答える