2012-07-05 69 views
0

我有一個實體說電腦屬性Dnshostname和導航屬性TechnicalProductsHosted。計算機到TechnicalProductsHosted是多對一和一對多的關係。 TechnicalProductsHosted是odata中的TechnicalProducts。 Entity TechnicalProducts具有導航屬性ResponsibleUser,具有多對一的關係。 ResponsibleUser是odata的員工。員工擁有導航屬性管理器,具有多對一的功能。當我點擊經理時,我需要員工實體。我希望獲得經理姓名列表。我正在使用Linqpad。以下是代碼。odata中的關係遍歷關係

void Main() 
    { 
    var a = from cpuid in Computers 
      where cpuid.DnsHostName == "xyz" 
      select new { 
    ITManager = cpuid.TechnicalProductsHosted.Select (x => x.ResponsibleUser.Manager.Select(z => new { ITManager = z.Name })), 
      }; 
    Console.WriteLine(a); 
    } 

這是錯誤。 'LINQPad.User.Employee'不包含'Select'的定義,並且沒有找到接受'LINQPad.User.Employee'類型的第一個參數的擴展方法'Select'(可以按F4添加using指令或程序集參考)

回答

2

我假設Manager屬性是一個單身(它不是一個集合)。在這種情況下,您可以使用選擇。 而是使用這樣的事情:

var q = from cpuid in Computers 
    where cpuid.DnsHostName == "xyz" 
    select new { 
     ITManagers = cpuid.TechnicalProductsHosted 
      .Select (x => x.ResponsibleUser.Manager.Name) 
    }; 

這會給你指定的主機名和每一個管理人員的列表的計算機列表誰的報告負責產品。請注意,雖然可能有重複。

如果你可以描述查詢應該達到什麼,那麼可能會有更好的選擇。

+0

這正是我想查詢達到的目的。你爲什麼認爲會有重複? 感謝您的幫助。 – Swapnil 2012-07-06 13:48:47

+0

該查詢將返回具有給定名稱的計算機的記錄,但ITManagers屬性將包含每個託管產品的管理器。如果你碰巧有相同的經理監督兩種產品,你會得到兩次經理。但它可能不會發生在您的數據集。 – 2012-07-06 19:36:00