如何将 if-else 混合到 linq 查询语法语句中

How to blend an if-else into linq query syntax statement

我有两个 collection。 collection 通知和 collection 文档类型。我需要收集有关它们的信息,并根据某些情况添加一个额外的字段。但是,我不知道如何执行此操作。

我从文档类型 collection 中获取文档类型 ID 和名称。而且我只从通知 collection 中获得了一个文档类型 ID。如果两者都有一个 ID,则应该在 return 中添加一个额外的字段,它只是一个 "Subscribed" 的字符串值。如果不是,则字符串值应为 "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 中实现。

我试过但 'feels' 错误的代码:

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 部分。我知道如何从 select 做一个倍数,但不知道如何做 if-else 部分。

编辑

两个collection里面是什么:

文档类型:

通知:

我想要的输出:

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

             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)
             })