2016-08-25 70 views
0

我有一個列名爲FILES的數據庫表。如何在linq查詢中執行子字符串?

FILES列中的數據看起來像這樣

//directory/anotherdirectory/file1.txt 

//directory/anotherdirectory/file2.txt 

//directory/anotherdirectory/file3.txt 

我希望LINQ創建像

"file1.txt\nfile2.txt\file3.txt" 

我希望能夠選擇列,並分析數據以串同一時間。

以下兩種方式會導致錯誤。

string filesNames = string.Join("\n", _repositoryFactory 
       .GetRepository<MyResponseEntity>() 
       .Entity 
       .ByMyId(id).Select(x => {x.FILES = "Just a test"; return x}).ToArray()); 

我也試圖做一個子沒有運氣

string filesNames = string.Join("\n", _repositoryFactory 
        .GetRepository<MyResponseEntity>() 
        .Entity 
        .ByMyId(id).Select(x => x.FILES.Substring(x.FILES.LastIndexOf('/')+1, 
            x.FILES.Length - (x.FILES.LastIndexOf('/')+1)).ToArray()); 
+0

取而代之的子串的,你可以使用包含? –

+0

不,我必須去掉文件名,但我不知道文件名是什麼。 – user1854438

回答

0

使用聚合方法。

var fileNames = _repositoryFactory 
        .GetRepository<MyResponseEntity>() 
        .Entity 
        .ByMyId(id) 
        .Select(e => e.Substring(e.LastIndexOf('/') + 1)) 
        .Aggregate((a, b) => a + "\n" + b); 
+0

它給了我一個錯誤LINQ to Entities無法識別方法'System.String Aggregate [String](System.Linq.IQueryable'1 [System.String],System.Linq.Expressions.Expression'1 [System.Func' 3 [System.String,System.String,System.String]])方法,並且此方法不能轉換爲存儲表達式。 – user1854438

+0

@ user1854438是否包含以下內容:「using System.Linq;」? – bvoleti

0
string filesNames = string.Join("\n", _repositoryFactory.GetRepository<MyResponseEntity>() 
         .Entity.ByMyId(id).Select(x => Path.GetFileName(x.FILES)).ToArray());