gpt4 book ai didi

c# - 应用 PredicateBuilder 查询项目列表的单个对象属性

转载 作者:行者123 更新时间:2023-11-30 17:51:49 24 4
gpt4 key购买 nike

鉴于以下示例模型,我需要通过其所有者的属性查询 ITEMS。这是 Entity Framework 集,我想使用 LINQ 来完成。

public class Owner
{
public int Id { get; set; }
public string Name { get; set; }
//More than 20 other properties
}

class Item
{
public int Id { get; set; }
public string Description { get; set; }
public Owner MyOwner { get; set; }
public int idOwner { get; set; }
//Several others properties
}

我已经有一个 PredicateBuilder使用所有者过滤器。

我想将这个谓词(它基本上是 where 子句的内容)应用于 Owner 对象,以获得所有 Item 其 Owner 满足谓词条件。

如果 Owner 是所有者列表...我可以使用 .Any(predicate) 但它的基数是 1。

编辑:

我尝试这样做是为了避免必须获取所有满足谓词条件的 Owner 然后执行 Contains(idOwner)

db.Items.Where(c => OwnerIdsCollection.Contains(c.idOwner ?? 0));

我已经看到它为甚至没有相关 Items 的所有者创建的大量 SQL CASE。

编辑 2 - 谓词:

public static Expression<Func<Owner, bool>> GetPredicate(OwnerCriteria criteria)
{
var predicate = PredicateBuilder.True<Owner>();

if (criteria.Active.HasValue) {
predicate = predicate.And(p => p.Active == criteria.Active.Value);
}
//Several other criteria checkings as above

return predicate;
}

条件是从用户过滤器中获得的。然后,我通常使用它来查询 Owners 集合,执行 db.Owners.Where(predicate);

现在,从概念上讲,我需要做类似的事情:db.Items.Where(x =>/*Items filters*/&& x.MyOwner.Where(myOwnerPredicate))

最佳答案

你能不能试试:

Items.Where(i => predicate(i.Owner))

根据您的EDIT 2:

db.Items.AsExpandable().Where(x => /*Items filters*/ && predicate.Invoke(x.Owner))

关于c# - 应用 PredicateBuilder 查询项目列表的单个对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19018204/

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