如何将新属性添加到C#列表中的每个列表项中

时间:2014-08-21 19:00:33

标签: c# asp.net list asp.net-mvc-5

我是C#新手。我没有运气就在寻找这个。 假设我将数据库结果转换为列表。类似于以下内容

var schedules = db.Schedules.Where(s => s.RequestId == id).ToList();

现在我需要在此列表中添加一个新元素。不是列表项,而是列表中存在的每个列表项的属性。

例如在php中,如果它是一个多维数组,我可以使用foreach循环遍历数组,它很简单$arrayList['new_key'] = "new_value";

如何将这样的属性添加到C#中的上述schedules列表中?更确切地说; Schedule是一个数据集。而且新属性也是我想要从不同数据集的另一个属性中获取的东西。

非常感谢。

编辑: 现在我意识到我真正需要的东西。我需要创建一个左外连接来连接Schedule和其他模型。我提出了一个新问题: How to create a simple left outer join in lambda expression in EF ASP.NET MVC5

2 个答案:

答案 0 :(得分:2)

“Schedule”(或任何返回的对象集)需要添加 1 属性。因此,要么将属性添加到对象,要么使用原始对象的属性(再加上一个)创建一个新对象,然后选择该对象。 e.g。

class Schedule2 : Schedule
{
    public String NewProperty { get; set; }

    public Schedule2(Schedule schedule)
    {
        // assign original properties here from "Schedule". e.g.
        base.RequestId = schedule.RequestId;
    }
}

然后:

var schedules = db.Schedules
                  .Where(x => x.RequestId == id)
                  .Select(x => new Schedule2(x))
                  .ToList();

1 尽管有DynamicObject,但在这种情况下我不认为这是合适的。

答案 1 :(得分:0)

你说Schedule是一个数据集。我假设Schedule是一个System.Data.DataSet的实例,只有一个表或System.Data.DataTable直接。

DataTable添加额外属性非常容易。您需要提前完成的任务是创建新DataColumn并将Columns添加到DataTable的{​​{1}}属性中。像这样:

DataSet ds1 = <whatever method returns the dataset>
DataTable dt1 = ds1.Tables[0];
dt1.Columns.Add("NewCol", typeof(string));

您现在可以使用“NewCol”作为DataRow来自dt1的{​​{1}}的索引器:

dt1.Rows[0]["NewCol"] = "a simple string";