如何在iCollection属性中选择具有特定项的项

本文关键字:选择 iCollection 属性 | 更新日期: 2023-09-27 18:06:58

我有以下类:

 public class Foo
    {
        [Key] 
        public int ID { get; set; }
        public virtual ICollection<Cat> Cats { get; set; }
    }

我正在尝试选择包含特定Cat对象的所有Foo对象。当前我正在做的是:

Cat  c = new Cat(10);
var lPs = Bd.Foos.Include("Cats").Where(p => SomeConditions).ToList();
var lFilter = lPs.Where(p => p.Cats.Contains(c)).ToList();

我不喜欢这种方法,因为我从数据库中带来了很多对象,只是为了用LinQ过滤它们。

有没有更好(更有效)的方法?

如果有用的话,DBcontext是这样定义的:

modelBuilder.Entity<Foo>().HasMany(p => p.Cats).WithMany();

如何在iCollection属性中选择具有特定项的项

您呼叫ToList() 2次。当您在第二行调用ToList时,它执行查询表达式并将结果加载到lps变量。您正在对下一行中的内存数据进行筛选。

您可以避免执行查询表达式的第一个ToList()调用,并将过滤代码合并到同一行。

var catIdToCheck = 10;  
var result = db.Foos.Where(g=>g.Cats.Any(y=>y.Id==catIdToCheck)).ToList();