2014-05-16 60 views
0

考慮以下兩個例子C#實體類...如何查詢EntityB集合中包含任何EntityB的所有EntityA?

class EntityA 
{ 
    public int EntityAId { get; set; } 
    public virtaul ICollection<EntityB> Bs { get; set; } 
} 

class EntityB 
{ 
    public int EntityBId { get; set; } 
    public string Foobar { get; set; } 
    public virtual EntityA A { get; set; } 
} 

我怎麼會去使用實體框架+ LINQ查詢的,包含EntityB提供的集合中的所有EntityB所有EntityA

爲了澄清,如果我有EntityB以下子...

var bs = new List<EntityB> 
{ 
    new EntityB { Foobar = "a" }, 
    new EntityB { Foobar = "b" }, 
    new EntityB { Foobar = "c" } 
}; 

我想找到所有EntityA其中EntityA.Bs集合包含上述bs集合中的所有可能的EntityB

回答

1

所以當你最初問我認爲你的意思是你只有一個dbset的EntityB。現在,我看你想找到任何EntityA在一組給定定義的EntityB,我們可以簡化這個:

var bs = your collection of EntityB 
var dbSet = dbSet of type EntityA 
var entities = dbSet.Where(m => m.Bs.Any(b => 
    bs.Any(b2 => b2.Foobar == b.Foobar).ToList(); 

因此,這將去翻EntityA的集合,將返回具有任何任何EntityA實體B的Foobar等於給定集合中的任何一個。

我會從EntityA查詢,因爲你得到的是EntityAs的集合。但是如果你想從EntityB那裏得到以下信息。

var entities = entityBSet.Where(m => 
    bs.Any(b => 
     b.Foobar == m.Foobar)) 
    .Select(m => m.A) 
    .ToList(); 
+0

但是,如何收集'EntityB'呢?我沒有處理我正在尋找的單個'EntityB',我需要包含來自該小集合集合中的任何'EntityB'的所有'EntityA'。使用DbSet 而不是B查詢也會更好嗎? – Ryan

+0

編輯我的答案 –

相關問題