2016-03-19 69 views
1

我有兩個不同的數據源,其中一個具有關於客戶端的詳細信息,另一個是僅具有ClientID但由於系統的部分遷移而導致的網站,我無法在數據庫級別加入它們(但是,這最終會發生):Linq to Object引用列表

var clients = _clientService.GetClientSummary(true); 
    var results = context.Sites.AsNoTracking().OrderByDescending(s => s.Id). 
       Skip((pageIndex - 1) * pageSize).Take(pageSize); 

      result.Content = pageResult.Select(a => new QuoteSearch 
      { 
       Accepted = a.Accepted, 
       Created = a.Created, 
       Id = a.Id, 
       Customer = clients.Find(b => b.Id == a.ClientId).Name 
      }).ToList(); 

運行上面的代碼返回一個錯誤

「LINQ到實體無法識別方法 「CertsAssured.Model.Client.ClientSummary 查找(系統。 Predicate`1 [CertsAssured.Model.Client.ClientSummary])'「

我可以在此步驟之後編寫代碼來執行任務,但必須將ClientId保存到我的對象中,然後遍歷。有沒有辦法在Select方法期間從客戶端列表中獲取信息?

感謝

回答

1

數據庫過濾/分頁設置完成後,您可以使用AsEnumerable到IQueryable的結果轉換爲內存IEnumerable的,你可以做查找對clients;

result.Content = pageResult 
     .AsEnumerable() 
     .Select(a => new QuoteSearch 
     { 
      Accepted = a.Accepted, 
      Created = a.Created, 
      Id = a.Id, 
      Customer = clients.Find(b => b.Id == a.ClientId).Name 
     }).ToList(); 

如果有很多數據庫字段和你不希望所有從數據庫中獲取的,可以過濾對IQueryable的領域第一,類似;

result.Content = pageResult 
     .Select(a => new     // This filters in the database 
     {         // to an anonymous type 
      Accepted = a.Accepted, 
      Created = a.Created, 
      Id = a.Id, 
      ClientId = a.ClientId 
     }) 
     .AsEnumerable()      // Convert to an IEnumerable 
     .Select(a => new QuoteSearch  // This is done in-memory 
     {         // generating the real type 
      Accepted = a.Accepted, 
      Created = a.Created, 
      Id = a.Id, 
      Customer = clients.Find(b => b.Id == a.ClientId).Name 
     }).ToList(); 
+0

感謝Joachim,工作完美,謝謝你的額外信息 – Pixelstiltskin