2

MyBaseClassBaseClassContainerの 2 つのクラスがあり、次のように宣言されています。

public class MyBaseClass
{
    private Guid id;
    public Guid ID
    {
        if (id == Guid.Empty)
        {
            id = Guid.NewGuid();
        }
        return id;
    }
    //...Other Properties omitted for brevity
}

public class BaseClassContainer : INotifyPropertyChanged
{
    private ObservableCollection<MyBaseClass> baseClasses;
    public ObservableCollection<MyBaseClass> BaseClasses
    {
    //...Omitted for brevity...
    }
}

次に、私のコードには、タイプ BaseClassContainer ( BaseClassContainerCollection ) の ObservableCollection があります。私が理解しようとしているのは、LINQ を使用して、MyBaseClass.ID の 1 つが特定の Guid と一致する ObservableCollection から単一の BaseClassContainer を選択する方法です。私が Single() メソッドを使用している理由は、それらがすべて一意になることがわかっているからです。

私は次のことを試しましたが、うまくいきません:

var result = BaseClassContainerCollection.Single(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid));

次のエラーが表示されます: タイプ 'MyBaseClass' を 'bool' に暗黙的に変換できません。私は何が欠けていますか?

4

1 に答える 1

3

クエリを分解しましょう:

BaseClassContainerCollection.Single(yourPredicate);

Single、ここで使用されているように、基本的には「この述語で BaseClassContainerCollection をフィルター処理する」(結果に含めるかどうかを true または false に評価する「フィルター」関数) ことを意味します。true/false を返す関数の代わりに、それを MyBaseClass に評価してほしいと言っているのですが、これは意味がありません。への内部呼び出しSingleは理にかなっています。これx => x.Id == guidは、true/false を返し、基準を満たす要素のみにフィルター処理する関数であるためです (その後、結果にそれらの 1 つだけが存在するか、例外をスローすることがわかっていることを示します)。

あなたがしたいのはSelect、内部クエリからの単一の MyBaseClass 結果であり、結果には 1 つのアイテムのみが返される必要があることがわかっているため、結果に対して (述語なしで) Single を呼び出します。私はあなたが探していると信じています:

BaseClassContainerCollection.Select(container => container.BaseClasses.Single(baseClass => baseClass.ID == specificGuid)).Single();
于 2012-06-27T01:10:24.533 に答える