2013-01-24 40 views
0

我有文檔類:如何在LINQ族元素得到結果,如Facebook的消息

public class Document 
{ 
     public int FromCompanyId { get; set; } 
     public int ToCompanyId { get; set; } 
     public string DocumentText { get; set; } 
} 

當任何公司發送文件給別人,我救了他們的Id的。不久,我有很多對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(任何公司發送文件到本公司),我想按FromCompanyIdid = FromCompanyId(本公司發送文件到其他公司)通過我想ToCompanyId到組。

這看起來像Facebook消息。當我通過我的消息時,我看到我的所有對話由其他用戶的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 }; 
... 

} 

對不起,對英文不好。

+0

爲什麼不使用2個查詢;一個獲取收到的文件和另一個獲取發送的文件?你打算在一個列表中顯示所有發送和接收的文件嗎? – daryal

+0

是的,我想顯示像Facebook消息文件。當點擊其他公司的名字時,在文件之間顯示。爲此,我想收集所有文件並將其發送到查看 –

回答

1

您可以使用下面的代碼。
它只是使用條件運算符來找出哪個是另一個公司的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) }; 
+0

非常感謝。我從早上起就在想這個 –

相關問題