Nik*_*las 3 c# linq-to-sql predicatebuilder

一个党可以有一个或多个联系对象.
我想选择所有缔约方谁是streetname包含特定关键字.
如果我只想在Party中搜索,我可以使用下面的代码.但是如何将其扩展到也在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);
}
Run Code Online (Sandbox Code Playgroud)
还有什么需要知道的吗?
编辑
我想我可以创建另一个谓词,然后加入它们.就像是:
var predicate2 = PredicateBuilder.False<Contact>();
Run Code Online (Sandbox Code Playgroud)
......并且在foreach中:
predicate2 = predicate2.Or(p => p.streetname.Contains(keyword));
Run Code Online (Sandbox Code Playgroud)
但是如何在返回之前加入谓词和谓词2?
EDIT2
或者,在执行谓词生成器之前加入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();
}
}
Run Code Online (Sandbox Code Playgroud)
关键是你有一个聚会的多个联系人,因此,如果"任何联系人与街道名称匹配"或"所有联系人与街道名称匹配",您应该决定是否要参加聚会.
对于第一种情况,它将是:
predicate = predicate.Or(p => p.Contacts.Any(c => c.streetname.Contains(keyword))));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3536 次 |
| 最近记录: |