Partyは、1 つ以上のContactオブジェクト を持つことができます。
ストリート名に特定のキーワードが含まれるパーティをすべて選択したい。パーティー
で検索したい場合は、以下のコードを使用できます。しかし、 Contactも検索するように拡張するにはどうすればよいですか?
public IQueryable<Party> SearchParties(List<string> keywords)
{
var predicate = PredicateBuilder.False<Party>();
foreach (string word in keywords)
{
var keyword = word;
predicate = predicate.Or(p => p.surname.Contains(keyword));
predicate = predicate.Or(p => p.lastname.Contains(keyword));
predicate = predicate.Or(p => p.number.Contains(keyword));
}
return db.Parties.Where(predicate);
}
他に知っておくべきことはありますか?
編集
別の述語を作成して、後でそれらに参加できると思います。何かのようなもの:
var predicate2 = PredicateBuilder.False<Contact>();
...そしてforeachで:
predicate2 = predicate2.Or(p => p.streetname.Contains(keyword));
しかし、戻る前に predicate と predicate2 を結合するにはどうすればよいでしょうか?
EDIT2
または、述語 Builder を実行する前に 、 PartyとContactに参加しますか?
EDIT3
生成されたクラスの一部を次に示します。
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Contact")]
public partial class Contact : INotifyPropertyChanging, INotifyPropertyChanged
{
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
private int _id;
// ...more properties
private EntityRef<Party> _Party;
public Contact()
{
this._Party = default(EntityRef<Party>);
OnCreated();
}
}