c# - 将 Observable 集合写入 Csv 文件

标签 c# mvvm

我有一个 datagridview,它以 mvvm 方式绑定(bind)到可观察集合。 我试图弄清楚如何将集合写入 csv 文件。

我可以格式化 header 并将其放入,但不确定如何迭代一个集合,取出值并将它们放入带有逗号分隔的文件中。

这是我的类(class)

public class ResultsModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Phone { get; set; }
        public string Username { get; set; }
        public bool Sucess { get; set; }
        public string MessageType { get; set; }
        public string SenderMessageSent { get; set; }
        public string SenderMessageReceived { get; set; }
    }

它被加载到可观察集合中

最佳答案

这是一个通用的帮助器方法,它利用反射来获取对象集合中所有属性的值,并序列化为逗号分隔的值字符串。 (1 行 = 集合中的 1 个对象)

public static IEnumerable<string> ToCsv<T>(IEnumerable<T> list)
        {
            var fields = typeof(T).GetFields();
            var properties = typeof(T).GetProperties();

            foreach (var @object in list)
            {
                yield return string.Join(",",
                                         fields.Select(x => (x.GetValue(@object) ?? string.Empty).ToString())
                                               .Concat(properties.Select(p => (p.GetValue(@object, null) ?? string.Empty).ToString()))
                                               .ToArray());
            }
        }

以及示例用法:

var oemResultsModels = new List<OemResultsModel>
                                   {
                                       new OemResultsModel
                                       {
                                           FirstName = "Fname1",
                                           LastName = "LName1",
                                           MessageType = "Type1",
                                           Phone = 1234567,
                                           SenderMessageReceived = "something1",
                                           SenderMessageSent = "somethingelse1",
                                           Sucess = true,
                                           Username = "username1"
                                       },
                                       new OemResultsModel
                                       {
                                           FirstName = "Fname2",
                                           LastName = "LName2",
                                           MessageType = "Type2",
                                           Phone = 123456789,
                                           SenderMessageReceived = "something2",
                                           SenderMessageSent = "somethingelse2",
                                           Sucess = false,
                                           Username = "username2"
                                       }
                                   };

            using (var textWriter = File.CreateText(@"C:\destinationfile.csv"))
            {
                foreach (var line in ToCsv(oemResultsModels))
                {
                    textWriter.WriteLine(line);
                }
            }

关于c# - 将 Observable 集合写入 Csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859574/

相关文章:

c# - 在 C# 中不使用参数将信息传递给构造函数

javascript - 为何今天如此插入客户端框架?

c# - 重新绑定(bind)新数据源时 DataGrid 不更新

c# - Windows 服务更改/删除注册表值

c# - Visual Studio 2010 Silverlight 项目在浏览器中作为文件 ://instead of localhost://打开

c# - 是否可以在逻辑应用程序设计器中隐藏密码参数?

c# - 将正确的数据模型传递给局部 View 的正确方法

c# - 在 C# 中,如何在 ViewModel 的 View 上设置 DataContext?

wpf - MVVM 与 3 层应用程序中的 Web 服务交互

C# - 如何在 MVVM 中处理 XAML 键盘?