2016-08-25 2 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()); 
Смежные вопросы