2013-10-27 4 views
0

У меня есть данные ресторана, и я пытаюсь проанализировать, кто посетил конкретный ресторан X. Данные имеет такую ​​структуру:Как распечатать содержимое моего списка в текстовый файл?

public class RestaurantXPatrons 
{ 
    public String PatronName { get; set;} 
    public List <strings> DateofVisits = new List <strings>(); 
} 

Я создал список RestaurantXPatrons называемого lstX, и я хочу, чтобы выходной lstX на вкладку -delimited текстовый файл (для просмотра в Excel позднее). Так вот мой выходной код:

var output = lstX.Select (x => x.PatronName + "\t" + x.DateofVisits); 
string filepath = @"C:\data.txt"; 
System.IO.File.WriteAllLines(filepath, output); 

При просмотре результатов в Excel или Notepad, я вижу «System.Collections.Generic.List`1 [System.String] » там, где должно быть содержание Список DateofVisits для каждого Покровителя ресторана X. Мой вопрос: как мне получить содержимое списка в мой вывод?

ответ

3

Вам нужно либо сделать что-то вроде x.DateOfVisits.FirstOrDefault() (чтобы получить первый экземпляр), либо свернуть список на строку как: String.Join("; ", x.DateOfVisits).

В качестве альтернативы, если вы хотите сделать что-то вроде:

Paul 01/01/2013 
Paul 01/02/2013 
Sally 01/01/2013 

Вы могли бы сделать

from x in listX 
group x by new { x.PatronName, x.DateOfVisit } into g 
select new String(g.Key.PatronName + "\t" + g.Key.DateOfVisit) 

... нет ничего, что я могу проверить с так все это делается «слепым» как бы - надеюсь, вы попадете на правильный путь.

+0

Не допускайте. Это ... – Steve

+0

@Steve Ну, вы никогда не знаете, что это может быть 'x.DateOfVisits = @" System.Collections.Generic.List1 [System.String] "; : P –

+0

Это «Список '. –

-1

необходимо выполнить итерацию по коллекции (выходную переменную), а затем записать их в StringBuilder или записать их непосредственно на диск с помощью WriteLine в объекте StreamWriter.

Когда вы наводите курсор на переменную var, вы увидите, что это тип коллекции, возвращаемой методом Select (метод расширения LINQ). вам нужно перебирать его и писать по строкам.

+1

В принципе, существует перегрузка для 'WriteAllLines', которая принимает' IEnumerable '.. – Matthias

+0

Действительно, есть. Забыл об этом, так как это было добавлено в недавнюю версию Framework - downvoter, предложение STILL VALID. –

+0

Я не спустил вниз :) – Matthias

Смежные вопросы