4

LINQ クエリを希望どおりに出力するのに問題があります。私は正しいアプローチを取っているかどうか確信が持てません。

テーブル:

私は 2 つのテーブルContactsを持っており、それを使用してLEFT OUTER JOINPermissionsを実行しています。

2 つのテーブル

結合クエリ:

from contact in Contacts
join permission in Permissions on contact.Id equals permission.ObjectId into permissionGrp
from p in permissionGrp.DefaultIfEmpty()
where (p==null && isAllowed) || (p!=null && /* ... further conditions */))
orderby /* ... ordering removed */
select new { contact, permission = p };

これは、該当する場合、およびnull一致する権限が存在しない場合に、権限を連絡先に一致させます。

参加しました

望ましい

連絡先を重複させたくありません。最初の Contact-Permission レコードだけに関心があります。そのようです:

望ましい

試み:

だから私は、パーミッションコレクションをどうにかして選択する必要があるとGroup By思いました。contact.IdFirstOrDefault()

アプローチ

from contact in Contacts
join permission in Permissions on contact.Id equals permission.ObjectId into permissionGrp
from p in permissionGrp.DefaultIfEmpty()
where (p==null && isAllowed) || (p!=null && /* ... further conditions */))
orderby /* ... ordering removed */
group p by contact into contactPermissionsGrp
select new { contact = contactPermissionsGrp.Key, permission = contactPermissions.FirstOrDefault() };

結果:

残念ながら、これはNotSupportedException: Specific method is not supported.. しかし、私のアプローチが正しいのか、それともLightSpeed ORM の制限なのかはわかりません。

アドバイスをいただければ幸いです。

4

3 に答える 3