如何在 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 };
...
}

对不起,英语不好。

如何在 LINQ 中对元素进行分组以获得像 Facebook 消息这样的结果

您可以使用以下代码。
它只是使用条件运算符来找出哪个是另一家公司的 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) };