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

时间:2017-04-04 06:43:18

标签: linq linq-query-syntax

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

我从Document types集合中获取文档类型ID和名称。我只从Notifications集合中获取文档类型ID。如果两者都有ID,则应该在返回时添加一个额外的字段,该字段的字符串值为"已订阅"。如果不是,则字符串值应为"取消订阅"。当然,我也可以使用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中添加一个字段,因为它一直给我错误。而且我不知道如何在Query语法中执行某种if-else语句。我知道我曾经在TSQL中这样做过,所以我希望它也可以在linq中实现。

我尝试过的代码,但感觉&#39;对我不对:

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,但不知道如何做if-else部分。

修改

两个馆藏内有什么:

文件类型:

  • ID
  • 名称
  • SuppID
  • 其他无关紧要的东西

通知:

  • ID
  • DocTypeID
  • 用户ID
  • 其他无关紧要的东西

我希望作为输出:

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

  • 文档类型ID
  • 文档类型名称
  • Bool值(如果通知集合中有doctype ID,则为true,否则为false)

1 个答案:

答案 0 :(得分: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)
             })