Linq 和 Query 的语法是我最薄弱的技能之一。我在获得所需结果时遇到问题。
我有两个表/集合。一个是 DocumentTypes,另一个是 Notifications。这些是他们认为重要的领域,我省略了那些无关紧要的领域。
文档类型
- ID
- 姓名
- 供应商 ID
通知
- ID
- 文档类型ID
- 用户身份
- 产品编号
- Last_Sequence
我有三个参数;用户 ID、供应商 ID 和产品 ID。
我需要供应商 ID 来获取与该供应商相关的所有 DocumentTypes 的列表。然后我需要 userID 和 ProductID 来获取与这些相关的通知列表。
然后我需要加入这两个列表,每个通知都会有一个与之链接的 documentTypeID。当有特定文档类型的通知时,它需要包含字段 Last_Sequence 并创建一个设置为 true 的新 bool 字段。
当没有通知时,可以将 Last_sequence 留空,并创建 bool 并将其设置为 false。
所以结果将是一个包含具有这些类型的对象的列表。
- 文档类型ID
- 文档类型名称
- BoolField(确实有一个与此相关的通知)
- 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 的集合,然后将其与我制作的新集合相结合,还是有更好的方法来解决这个问题?