1

私はEF 5に非常に慣れていません。ユーザーがいくつかの検索基準に基づいて特定のエンティティ(顧客と言う)を検索できる単純な検索要件があります。ユーザーは基準を使用するかどうかを選択できます。検索条件は、すべての条件の「AND」である必要があります。だから私はこのようなコードを書く

IQueryable _customer;
_customer = from c in context.Customer                       

    where 
                (txtCustomerName.Text.Length == 0 || c.name == txtCustomerName.Text)
                && (txtpropcust1.Text.Length == 0 || c.customfield1 == txtpropcust1.Text)
                && (txtpropcust2.Text.Length == 0 || c.customfield2 == txtpropcust2.Text)
                && (txtpropcust3.Text.Length == 0 || c.customfield3 == txtpropcust3.Text)
                && (txtpropcust4.Text.Length == 0 || c.customfield4 == txtpropcust4.Text)
                && (txtpropcust5.Text.Length == 0 || c.customfield5 == txtpropcust5.Text)

                select c;

    GridView1.DataContext = _customer;  

ストア クエリ (DbSet、DbQuery、DbSqlQuery) へのデータ バインディングはサポートされていません。代わりに、DbSet で Load を呼び出すなどして、DbSet にデータを入力し、ローカル データにバインドします。WPF の場合DbSet.Local にバインドします。WinForms の場合、DbSet.Local.ToBindingList() にバインドします。

続行する別の方法はありますか?

4

2 に答える 2

2

私はから仮定しているので

GridView1.DataContext = _customer;

WPF を使用している場合、エラーは、知っておく必要があることをほとんど伝えています。DbSetEntityFramework が作成した に直接データバインドすることはできません。簡単な修正の可能性が高いため:

GridView1.DataContext = _customer.AsEnumerable();
于 2013-08-04T07:31:48.523 に答える
2

編集:おそらく質問を誤解しました。しかし、IQueryable に直接バインドすることはできないので、.ToList() または .ToEnumerable() が必要になると思います。私たちのプロバイダー(db2)はその構文が好きではないため、私の答えです。実際の解決策は、@Tieson T によって指摘されました。

正確な問題はわかりませんが、通常はif. 多くの場所で必要な場合は、このロジックをラップする単純な拡張メソッドを作成できます。

var query = from d in db.Customers;

if (text1.Length > 0) query = query.Where(x => x.Field == text1)
if (text2.Length > 0) query = query.Where(x => x.Other == text2)

var data = query.ToList(); // etc
于 2013-08-04T07:32:16.077 に答える