如何在 LINQ 中对元素进行分组以获得像 Facebook 消息这样的结果
本文关键字:Facebook 消息 结果 LINQ 元素 | 更新日期: 2023-09-27 17:55:34
我有文档类:
public class Document
{
public int FromCompanyId { get; set; }
public int ToCompanyId { get; set; }
public string DocumentText { get; set; }
}
当任何公司向其他人发送文档时,我保存了他们的Id
。很快我有很多对身份证:
1, 2 // Company which has Id=1 sent document to Company which has Id=2.
1, 3 // Company which has Id=1 sent document to Company which has Id=3.
4, 3 // Company which has Id=4 sent document to Company which has Id=3 etc.
2, 1
4, 3
4, 5
5, 4
5, 5
4, 5
3, 1
我想让任何公司只管理自己的文件。发送和接收。如何通过公司 ID 获取文件?或者任何人都可以给出另一个建议。
因此,当id = ToCompanyId
(任何公司向该公司发送文档)时,我想按FromCompanyId
分组,当id = FromCompanyId
(该公司将文档发送给其他公司)时,我想按ToCompanyId
分组。
这看起来像脸书消息。当我划过我的消息时,我会看到其他用户的ID的所有对话。在我的应用程序中,我想按其他公司的ID查看文件。
这仅适用于id = FromCompanyId
.
GetDocumentsByCompanyId(int Id)
{
...
var myDocs= MyDatabaseContext.Documents.Where(e => e.FromCompanyId == Id|| e.ToCompanyId == Id);
var docGroups = from m in myDocs
group m by m.ToCompanyId
into g select new { ToCompanyIdKey = g.Key, betweenDocs = g };
...
}
对不起,英语不好。
您可以使用以下代码。
它只是使用条件运算符来找出哪个是另一家公司的 ID。此信息用于对文档进行分组。
var myDocs = MyDatabaseContext.Documents
.Where(e => e.FromCompanyId == Id ||
e.ToCompanyId == Id)
.Select(x => new { OtherCompanyId
= (x.FromCompanyId == Id) ?
x.ToCompanyId :
x.FromCompanyId,
Document = x });
var docGroups = from m in myDocs
group m by m.OtherCompanyId into g
select new { ToCompanyIdKey = g.Key,
BetweenDocs = g.Select(x => x.Document) };