0

プロパティ Dnshostname とナビゲーション プロパティ TechnicalProductsHosted を持つ Computers というエンティティがあります。Computers と TechnicalProductsHosted は、多対 1 および 1 対多の関係です。TechnicalProductsHosted は、odata の TechnicalProducts です。エンティティ TechnicalProducts には、多対 1 の関係を持つナビゲーション プロパティ ResponsibleUser があります。ResponsibleUser は odata の Employee です。Employee には、多対 1 の関係を持つナビゲーション プロパティ Manager があります。マネージャーをクリックすると、従業員エンティティに移動します。マネージャー名のリストを取得したいと思います。Linqpadを使用しています。以下はコードです。

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 ディレクティブまたはアセンブリ参照を追加します) )

4

1 に答える 1

2

Manager プロパティはシングルトン (コレクションではありません) であると想定しています。その場合、Select を使用できます。代わりに、次のようなものを使用します。

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

これにより、指定されたホスト名を持つコンピューターのリストと、製品を担当するマネージャーのリストがそれぞれに表示されます。ただし、重複する可能性があることに注意してください。

クエリが何を達成すべきかを説明できれば、より良いオプションがあるかもしれません。

于 2012-07-05T19:10:07.383 に答える