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

问题描述:

我有以下类:如何在iCollection属性中选择具有特定项目的项目?

public class Foo 
    { 
     [Key] 
     public int ID { get; set; } 

     public virtual ICollection<Cat> Cats { get; set; } 
    } 

我想选择所有包含特定猫对象的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(); 

,因为我带来许多对象从DB只使用LINQ来过滤他们,我不喜欢这种方式。

有没有更好的方法?

,如果它是有用的,对的DbContext是这样定义的:

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

要调用ToList() 2倍。当您在第二行中调用ToList时,它会执行查询表达式并将结果加载到lps变量。您正在对下一行的内存数据执行过滤器。

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

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

这是正确的!谢谢 ! – Ayorus