2016-11-11 9 views
0

私の目標は、3 propertiesに基づいてオブジェクトを選択することで動作しません。 次は、したがって、上記の例から、私が取得する必要があり、私はLINQは、複数のプロパティに(Tの)リストから個別のオブジェクトを選択することは

List(Of Access)

enter image description hereに抱えているデータである二つのオブジェクトのみ:

1) CreatedBy:1, GrantedTo: 65, PatientID: 48 
2) CreatedBy:1, GrantedTo: 66, PatientID: 48 

が、私はを取得しています8つの。私は、コードは、オブジェクトの一意の各グループからの最初の選択する必要があります信じて

Dim distinctList As List(Of Access) = t.GroupBy(Function(p) New With {p.GrantedTo, p.PatientID, p.CreatedBy}).[Select](Function(g) g.First()).ToList() 

は、ここに私のバグのあるコードです。

アイデア?

+0

入手したいデータはありますか? – vipin

+0

@vipinデータは、関数から入力パラメータとしてアクセス(アクセス)のリストとして渡されます – alwaysVBNET

+0

このコードで取得しようとしているプロパティは何ですか? – vipin

答えて

1

あなたのロジックに大きな欠陥を持っている:

したがって、上記の例から、私は2つのオブジェクトのみ取得する必要があります。
1)CREATEDBY:1、GrantedTo:65、PatientID:48
を 2)CreatedBy:1、GrantedTo:66、PatientID:48
[...]
私はこのコードでは、オブジェクトの各固有グループから最初のコードを選択する必要があります。

はい、CreatedBy、GrantedTo、PatientIDでデータをグループ化できます。あなたが戻って得るもの
しかしはタイプAccessの(合理的な)オブジェクトにすることはできません、それは各グループからの最初ではありません。

なぜですか?あなたのオブジェクトからすべてのデータを選択したい場合 - AccessIDPermissionIDなど - その属性にはどのような値が必要ですか?

例1):
AccesIDは238または240ですか。
PermissionIDは15または18である必要がありますか?
...
私はあなたがポイントを持っていると思います。

それでは、あなたが実際にやるべきことだけでなく、Accessオブジェクトとしてではなくどちらか匿名型または定義されたタイプとしてグループ化されたデータを選択することです。

匿名バージョン:

Dim distinct = From acc In access 
       Group By g = New With {Key .CreatedBy = acc.CreatedBy, 
             Key .GrantedTo = acc.GrantedTo, 
             Key .PatientID = acc.PatientID} Into Group 

Keyキーワードはここに必須です!)

今、あなたは別のオブジェクト/関数にこれらの個別の値を渡したい場合は、単一のparamaetersとして渡すことができます。

For Each value In distinct 
    foo.bar(value.g.CreatedBy, value.g.GrantedTo, value.g.PatientID) 
Next 

それともあなただけの3つのプロパティが含まれている自身の小さなクラスを作成します。 (私は時間がなくなっているので、この点を残していますが、それはまっすぐでなければなりません)。

EDITは試してみてください、次の(盲目的に入力された未検証):

Dim distinct = (From acc In access 
       Group By g = New With {Key .CreatedBy = acc.CreatedBy, 
             Key .GrantedTo = acc.GrantedTo, 
             Key .PatientID = acc.PatientID} Into Group 
       Select New Access With {.CreatedBy = g.CreatedBy, 
             .GrantedTo = g.GrantedTo, 
             .PateintID = g.PatientID}).ToList() 

これがセットのみの3つのプロパティであなたにList(Of Access)で新しい Accessオブジェクトを与える必要があります。

+0

どのAccessIDまたはPermissionIDが選択されても構いません。私が気にするのは、これらの3つの特性に基づいてユニークなオブジェクトを得ることです。あなたのコードはうまくいくようです。フィルターを適用したオブジェクトの新しいクラスを作成する代わりに、List(Of Access)オブジェクトを取得できるようにコードを変更できますか? – alwaysVBNET

+1

私の編集をチェック.. –

関連する問題