0

我有两个系列。Notifications 集合和 Document 类型集合。我需要收集有关它们的信息,并根据某些内容添加一个额外的字段。但是,我不知道如何做到这一点。

我从文档类型集合中获取文档类型 ID 和名称。而且我只从 Notifications 集合中获得了一个文档类型 ID。如果两者都存在 ID,则应在返回值中添加一个额外字段,该字段是简单的“已订阅”字符串值。如果不是,则字符串值应为“Unsubscribed”。当然,我也可以使用 bool 值。

这是我到目前为止得到的。

从通知中获取我需要的代码:

var notifications = from n in repository.Get<Domain.Notification>()
                                where n.UserId == userID
                                select n.DocTypeId;

从文档类型中获取我需要的代码:

(注意:如果我可以在这里加入,我更愿意这样做。)

var doctypes =  from d in repository.Get<Domain.DocumentType>()
                where d.SupplierID == SuppId
                select new { d.Id, d.Name};

我还没有加入。我不知道如何将字段添加到 select new 中,因为这样做时它一直给我错误。而且我不知道如何在查询语法中执行某种 if-else 语句。我知道我曾经在 TSQL 中这样做过,所以我希望在 linq 中也可以。

我尝试过但对我来说“感觉”不对的代码:

string temp = "unsubscribed";
            bool temp2 = true;
            var testing =
                from d in repository.Get<Domain.DocumentType>()
                where d.SupplierID == SuppId
                select new { d.Id, d.Name, temp, temp2 = false };

所以在这里我尝试了一些方法来添加第三个字段。我的做法对我来说感觉有点脏,但如果没有其他选择,我会使用它。我现在需要的是如何添加 if-else 部分。我知道如何做一个multiplefrom select,但不知道如何做if-else部分。

编辑

两个集合里面有什么:

文件类型:

  • ID
  • 姓名
  • 供应商 ID
  • 其他无关的东西

通知:

  • ID
  • 文档类型ID
  • 用户身份
  • 其他无关的东西

我想要的输出:

每个对象包含三个项目的列表,即:

  • 文档类型 ID
  • 文档类型名称
  • 布尔值(如果通知集合中存在文档类型 ID,则为 true,否则为 false)
4

1 回答 1

1
             var notifications = from n in repository.Get<Domain.Notification>()
                            where n.UserId == userID
                            select n.DocTypeId;

             var docTypes = repository.Get<Domain.DocumentType>().Where(d =>d.SupplierID == SuppId).Select(d =>new {
             d.Id,
             d.Name,
             hasEntryInNotifications=notifications.Any(n => n ==d.Id)
             })
于 2017-04-04T07:35:29.140 回答