我有以下代码:
var contentTypes =
(
from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
);
如何在id为99且名称为“All”的contentTypes中添加其他元素?
我试图使用contentTypes.Add(
但智能感知似乎不允许这样做。
答案 0 :(得分:2)
您无法添加IEnumerable<T>
。 IEnumerable<T>
代表你可以迭代的序列;它们不代表您可以添加的集合。你可以做的是concatenate到你的序列的末尾,获得一个新的序列:
var sequence = contentTypes.Concat(
new[] {
new { id = 99, name = "All" }
}
);
现在,如果您对sequence
进行迭代,您将首先看到流向您的contentTypes
元素,然后最后一项将是附加项new { id = 99, name = "All" }
。
答案 1 :(得分:1)
您可以将新值连接到IEnumerable&lt;&gt;的末尾。
var contentTypes =
(
from contentType in new[]{new {ContentTypeId = 1, Name="TEST"}}
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
).Concat(new[]{new {id = 99, name="All"}});
生成的IEnumerable将以99 / All
结束答案 2 :(得分:0)
如果您使用contentTypes.ToList()
,则可以添加到该列表,但这样做会创建一个集合的新实例,因此您实际上并未修改源集合。
答案 3 :(得分:0)
试试这个 -
var contentTypes =
(
from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
).ToList();
由于您已将contentTypes转换为List,因此应该允许您向其添加新项目。
答案 4 :(得分:0)
首先,您无法在IList.Add
上使用IEnumerable<T>
。所以你需要创建一个新的集合。
您选择的是匿名类型,请使用Concat
为查询添加固定的anynymous类型:
var allTypes = new[]{new { id = 99, name = "All" }}; // creates a fixed anonymous type as `IEnumerable<T>`
var contentTypes = from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
};
var result = allTypes.Concat(contentTypes).ToList(); // concat