Linq と Query の構文は、私の最も苦手なスキルの 1 つです。望ましい結果を得るのに問題があります。
2 つのテーブル/コレクションがあります。1 つは DocumentTypes で満たされ、もう 1 つは Notifications で満たされます。これらは問題を保持するフィールドです。そうでないものは省略しました。
ドキュメントの種類
- ID
- 名前
- サプライヤーID
通知
- ID
- DocumentTypeID
- ユーザーID
- 製品番号
- Last_Sequence
3 つのパラメーターがあります。ユーザー ID、サプライヤー ID、および製品 ID。
そのサプライヤに関連付けられているすべての DocumentTypes のリストを取得するには、supplierID が必要です。次に、それらに関連付けられた通知のリストを取得するために、userID と ProductID が必要です。
次に、これら 2 つのリストに参加する必要があります。すべての通知には、リンク先の documentTypeID があります。特定のドキュメント タイプの通知がある場合、Last_Sequence フィールドを含め、true に設定された新しい bool フィールドを作成する必要があります。
通知がない場合は、Last_sequence を空のままにし、bool を作成して false に設定できます。
したがって、結果はこれらの型を持つオブジェクトのリストになります。
- DocumentTypeID
- DocumentTypeName
- BoolField (これに関連付けられた通知がある場合は true)
- NotificationID (存在する場合のみ)
- Last_sequence (存在する場合のみ)
私がこれまでに持っているもの。
以前のバージョンでは、bool フィールドと documentType 情報を追加するだけで済みました。そのために私はこの声明を出しましたが、必要なものをそれに追加することはできないようです:
List<DocumentTypeNotification> docTypes = repository.Get<Domain.DocumentType>().Where(d => d.SuppID == SuppId).Select(d => new DocumentTypeNotification
{
DocTypeID = d.Id,
DocTypeName = d.Name,
Subscribed = notifications.Any(n => n == d.Id)
}).ToList();
私が新しいもののために試したことはこれですが、通知が関連付けられている場合にのみデータが返されます。存在しない場合、その documentType データは返されません。
var temptest = from notif in repository.Get<Domain.Notification>()
join doctype in repository.Get<Domain.DocumentType>() on notif.DocTypeId equals doctype.Id
select new DocumentTypeNotification { DocTypeID = doctype.Id, DocTypeName = doctype.Name, Subscribed = true, NotifID = notif.Id, last_sequence = notif.Last_Sequence};
編集:これは私が試したものの例ですが、うまくいきません。ここでの問題は、n.last_sequence を実行しようとすると n が存在しないことです。
List<DocumentTypeNotification> docTypes = repository.Get<Domain.DocumentType>().Where(d => d.SuppID == SuppId).Select(d => new DocumentTypeNotification
{
DocTypeID = d.Id,
DocTypeName = d.Name,
Subscribed = notifications.Any(n => n == d.Id),
last_sequence = test.Where(n => n.DocTypeId == d.Id).Select(n.Last_Sequence).FirstOrDefault()
//from n in test
//where n.DocTypeId == d.Id
//select n.Last_Sequence
}).ToList();
これをどのように解決すればよいのか考えました。最初にすべての適切な DocumentTypes のコレクションを作成し、それを作成した新しいコレクションと結合する必要がありますか?それとも、これを解決するためのより良い方法はありますか?