gpt4 book ai didi

c# - 有两个表的谓词生成器

转载 作者:行者123 更新时间:2023-11-30 14:39:34 26 4
gpt4 key购买 nike

enter image description here

Party 可以有一个或多个Contact 对象。

我想选择街道名称包含特定关键字的所有派对
如果我只想在 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);
}

您还有什么需要知道的吗?

编辑
我想我可以创建另一个谓词,然后再加入它们。像这样的东西:

var predicate2 = PredicateBuilder.False<Contact>();  

...并在 foreach 中:

predicate2 = predicate2.Or(p => p.streetname.Contains(keyword));  

但是我如何在返回之前连接 predicate 和 predicate2 呢?

EDIT2
或者,在做谓词生成器之前加入派对联系

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

最佳答案

要点是您有一个派对的多个联系人,因此如果“任何联系人与街道名称匹配”或“所有联系人都与街道名称匹配”,您应该决定是否要有一个派对。

第一种情况是:

predicate = predicate.Or(p => p.Contacts.Any(c => c.streetname.Contains(keyword))));

关于c# - 有两个表的谓词生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com