保存到csv后的数据格式如屏幕截图所示:
这是我的C#代码。
$ ssh -v 127.0.0.1 -p 1222
OpenSSH_7.3p1, OpenSSL 1.0.2k 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 1222.
debug1: connect to address 127.0.0.1 port 1222: Connection refused
ssh: connect to host 127.0.0.1 port 1222: Connection refused
你知道遗失了什么或我弄错了什么吗?
更新:UserData.Properties:
在这里,我可以按属性选择属性:
UserDataDBsDataContext dataContext = new UserDataDBsDataContext();
List<UserData> usersL = (from u in dataContext.UserDatas
//where u.Id.Equals(13)
select u).ToList();
StreamWriter writer = new StreamWriter("my_data.txt");
string csv = String.Join(",", usersL.Select(x => x.ToString()).ToArray());
writer.Write(csv);
writer.Close();
但是我想要整个对象,稍后它会上传到我的应用程序。
答案 0 :(得分:1)
.NET中默认的.ToString()
个对象只是写入对象的全名(所以"LayoutMVVM.LinqToSqlClasses.UserData"
就是这样)。您必须重载.ToString()
或手动撰写数据。请注意,直接编写CSV已成熟问题......转义CSV很复杂(例如,转义This is a "quoted" string
或新行)。搜索能够正确执行此操作的库。
答案 1 :(得分:1)
使用此代码
String.Join(",", usersL.Select(x => x.ToString()).ToArray());
您正在调用ToString()
个实例中的UserData
方法。默认情况下,当调用它的ToString()
方法时,您将获得类的命名空间。如果要在csv文件中写入数据,则必须从实例中获取值。
一种方法是使用此代码
var lines = usersL.Select(x => string.Format("{0},{1},{2},{3}", x.Id, x.FirstName, x.LastName, x.Type))
.ToList();
File.WriteAllLines("my_data.txt", lines);
您也可以覆盖UserData的ToString()方法。但是,在我看来,这不是一个干净的方式,因为UserData类不应该知道它在csv文件中保存的方式。
/ edit:使用反射
var properties = typeof(UserData).GetProperties();
var userValues = new List<string>();
foreach (var user in usersL)
{
var values = new List<object>();
foreach (var property in properties)
{
object value = property.GetValue(user, null);
values.Add(value);
}
userValues.Add(string.Join(",", values));
}
File.WriteAllLines("my_data.txt", userValues);
答案 2 :(得分:1)
尝试使用以下内容:
Type t = typeof(UserData);
PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
using(StreamWriter writer = new StreamWriter("my_data.txt"))
{
foreach(var user in usersL)
{
List<object> propValues = new List<object>();
foreach(var pi in propInfos)
{
propValues.Add(pi.GetValue(user, null));
}
string csvLine = String.Join(",", propValues);
writer.WriteLine(csvLine);
}
}