Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何遍历列表并编辑is内容?_C#_Asp.net_Asp.net Mvc_Linq - Fatal编程技术网

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

C# 如何遍历列表并编辑is内容?,c#,asp.net,asp.net-mvc,linq,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(); 但这是行不通的。如何编辑var result中的内容?匿名对象是不可变的,这就是为什么会出现只

现在我要做的是遍历结果并编辑其所有“名称”内容。 大致情况如下:

var courses = _repository.GetAllCoursesDetailsByCourseId(id);
var result = (from s in courses select new {  id = s.Course_ID,  name=s.Course_Date}).Distinct().ToList();

但这是行不通的。如何编辑var result中的内容?

匿名对象是不可变的,这就是为什么会出现只读错误消息

foreach (var i in result)
{
     string[] temp = i.name.Split(',');
     string[] token = temp[0].Split(' ');
     string newtemp = token[1] + " " + temp[1];
     i.name = newtemp;
}

我建议您在此处查看更多信息:

匿名类型属性是

构建一个生成名称的函数,然后直接在LINQ中使用它:

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;
 }

这会解决你的问题。(我没有更改您的代码,但您应该小心使用索引,如果您没有找到任何“,”或“”,您将抛出异常)


当您使用foreach时,无论您做什么更改,更改都在临时变量i中,而不是在实际列表中,请尝试使用traditonal for或迭代器。

正如@Muhammad所说,您需要另一个具有更新值的列表。您可以通过任何列表上的Where扩展方法扩展列表搜索,然后应用如下更改

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]);
}

你能详细说明什么不起作用吗?你有错误吗?结果元素在foreach之后未更改?您必须将修改后的数据添加到另一个列表中。它在i.name下面加下划线,并表示只读属性不能用作分配目标仅用于列表。这样我就可以把它传递回视图
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]);
}
var newResult = result.Where(q=> q.name == "ValueToUpdate").ToList().ForEach(i => i.name = "NewValue");