2010-10-18 49 views
1

我有了具有組織的EntityCollection用戶實體的EntityFramework模型。我怎樣才能凝結以下Linq查詢到一個IQueryable的

爲特定的用戶,我想寫一個LINQ查詢返回該用戶屬於其中該查詢將達到分貝只有一次組織的名稱。

我的問題是,我不能看到如何寫這個查詢,而無需先兌現用戶然後查詢用戶組織集合。

我想嘗試寫一個命中db的查詢一次。

我到目前爲止有:

var orgNames = context.Users 
    .Where(u => u.LoweredUserName == userName.ToLower()) 
    //materialises user 
    .FirstOrDefault() 
    .Organisations 
    //second hit to the db 
    .Select(o => o.Name); 

我是僞瞄準了,但有什麼不能見樹不見林:

orgNames = context.Users 
    .Where(u => u.LoweredUserName == userName.ToLower()) 
    //don't materialise but leave as IQueryable 
    .Take(1) 
    //The problem: turn what the query sees as possibly multiple 
    // (due to the Take method) EntityCollection<Organisation> into a List<String> 
    .Select(u => u.Organisations.Select(o => o.Name)); 

我已經看過聚集,但我似乎是想在圈:) :)

回答

2

Doh!我想我可以使用到的SelectMany凝結的集合集合回答我的問題成爲一個集像這樣:

orgNames = context.Users.Where(u => u.LoweredUserName == userName.ToLower()) 
       .Take(1) 
       .SelectMany(u => u.Organisations) 
       .Select(o => o.Name); 
0

我假設低位用戶名是唯一的,否則查詢將是沒有意義的,所以你可以使用。

context.Users 
     .Where(u => u.LoweredUserName == userName.ToLower()) 
     .Select(u => u.Organisations.Select(o => o.Name)); 
相關問題