如何将 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里面是什么:
文档类型:
- ID
- 姓名
- 供应商 ID
- 其他无关紧要的东西
通知:
- ID
- 文档类型ID
- 用户ID
- 其他无关紧要的东西
我想要的输出:
每个 object 包含三个项目的列表,即:
- 文档类型 ID
- 文件类型名称
- 布尔值(如果通知中有文档类型 ID,则为真 collection,否则为假)
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)
})
我有两个 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里面是什么:
文档类型:
- ID
- 姓名
- 供应商 ID
- 其他无关紧要的东西
通知:
- ID
- 文档类型ID
- 用户ID
- 其他无关紧要的东西
我想要的输出:
每个 object 包含三个项目的列表,即:
- 文档类型 ID
- 文件类型名称
- 布尔值(如果通知中有文档类型 ID,则为真 collection,否则为假)
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)
})