var courses = _repository.GetAllCoursesDetailsByCourseId(id);
var result = (from s in courses select new { id = s.Course_ID, name=s.Course_Date}).Distinct().ToList();
现在我要做的是迭代结果并编辑它的所有" name"内容。 。 一个粗略的想法如下:
foreach (var i in result)
{
string[] temp = i.name.Split(',');
string[] token = temp[0].Split(' ');
string newtemp = token[1] + " " + temp[1];
i.name = newtemp;
}
但这不起作用。如何编辑var结果中的内容?
答案 0 :(得分:0)
Try something like this:
foreach (var i in result)
{
string temp = i.name.Split(',');
string token = temp.Split(' ');
string newtemp = token + " " + temp;
i.name = newtemp;
}
答案 1 :(得分:0)
匿名对象是不可变的,这就是您收到Readonly错误消息的原因。
我建议你在这里查看更多信息:Why are the properties of anonymous types in C# read-only?
答案 2 :(得分:0)
匿名类型属性为readonly。
构建一个生成名称的函数,然后直接在LINQ中使用它:
private string GenerateNewName(string name) {
string temp = name.Split(',');
string token = temp.Split(' ');
return token + " " + temp;
}
var result = (from s in courses select new { id = s.Course_ID, name=GenerateNewName(s.Course_Date)}).Distinct().ToList();
答案 3 :(得分:0)
这应该可以解决您的问题。 (我没有改变你的代码,但你应该小心你的索引,如果你没有找到任何'或者'你会抛出例外)
var result = (from s in courses select new { id = s.Course_ID, name= splitName(s.Course_Date) }).Distinct().ToList();
private string splitName(string value)
{
string[] temp = i.name.Split(',');
string[] token = temp[0].Split(' ');
return (token[1] + " " + temp[1]);
}
答案 4 :(得分:0)
当你使用foreach时,无论你做什么改变,改变都在temp var i中,而不是在实际列表中,尝试使用traditonal for或迭代器。
答案 5 :(得分:0)
正如@Muhammad所说,你需要另一个包含更新值的列表。您可以通过任何列表中的 Where 扩展方法扩展您的列表搜索,然后应用您的更改,如下所示,
var newResult = result.Where(q=> q.name == "ValueToUpdate").ToList().ForEach(i => i.name = "NewValue");