如何遍历列表并编辑内容?

时间:2014-04-16 07:39:19

标签: c# asp.net asp.net-mvc linq

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结果中的内容?

6 个答案:

答案 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");