2015-12-17 122 views
1

我用string.join但不工作。如何字符串數組轉換字符串值,在linq線?

IQueryable<CandidateVModel> list = cRepository.Table.Where(x=> !x.CFDemand.Any(y => y.AStatusId == (int) TStatus.SWork)).Select(x => new CandidateVModel 
     { 
      ... 
      Email = x.Email, 
      Tags = x.Tags, 
      Comments= string.Join(", ",x.CFDemand.SelectMany(y=>y.JInterview.SelectMany(z=>z.JInterviewer.SelectMany(t=>t.JInterviewerFeedback.Select(a=>a.Comments))))), 
      Ref= x.Ref 
     }).AsExpandable().Where(p); 

錯誤:消息=「LINQ實體無法識別方法 'System.String加入(System.String,System.Collections.Generic.IEnumerable`1 [System.String])' 方法,和該方法不能轉換成商店表達式。「

+2

這需要認真重新思考....之後的第一選擇很多更不用說接下來的3本我失去了一個代碼味道對我來說...... –

+0

沒有與'String.Join'等價的SQL,因此EF無法將其轉換爲SQL。如果您可以提供有關數據模型的更多詳細信息,則可以通過拉取兩個集合並將它們加入到Linq-to-Objects中來獲得幫助。 –

+0

引用下面的鏈接: - http://stackoverflow.com/questions/4095658/how-do-i-concatenate-strings-in-entity-framework-query – Sahi

回答

0

沒有挖掘太多成這樣了,解決問題LINQ to Entities does not recognize the method一個辦法就是簡化你從數據庫中獲取什麼,創造像這樣在您的視圖模型一個輔助屬性:

[IgnoreDataMember] 
    public IEnumerable<string> CommentsFromDb 
    { 
     set 
     { 
      Comments = string.Join(", ", value); 
     } 
    } 

[IgnoreDataMember]將繼續這個幫助屬性被序列化。

和更新您的代碼片段是這樣的:

... 
CommentsFromDb = x.CFDemand.SelectMany(y=>y.JInterview.SelectMany(z=>z.JInterviewer.SelectMany(t=>t.JInterviewerFeedback.Select(a=>a.Comments))))