将属性添加到列表中的项目

Der*_*rek 2 c# asp.net list razor asp.net-mvc-3

因此,我刚开始使用ASP.NET MVC,但是遇到了一个我找不到答案的问题。

我从SQL数据库中获取一些数据,并使用以下代码将其发送到视图:

var listingsQuery = (from s in db.tblListings select s).OrderBy(s => s.listingID).Skip(100).Take(25);
var listings = listingsQuery.ToList();

return View(listings);
Run Code Online (Sandbox Code Playgroud)

这很好用,但是我想在结果列表中添加一个值。基本上我想做的是这样的:

foreach (var item in listings)
{
    this.Add("propertyType", "Home");
}
Run Code Online (Sandbox Code Playgroud)

但这显然行不通。我试图做ToArray()而不是ToList(),这让我无处可去。

Pau*_*ski 5

是否要向List集合中的每个对象添加新属性?如果是这样,您可以创建一个继承自列表中任何对象类型的新类型(将鼠标悬停在listingsQuery变量上-该类型位于<>符号内),然后向其中添加新属性:

public class MyNewType : ExistingTableType
{
    public string PropertyType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后在查询中,将属性投影到此新类型中:

var listingsQuery = (from s in db.tblListings  
                     orderby s.listingID
                     select new NewType
                     {
                         listingID = s.listingID,
                         someOtherField = s.someOtherField
                     }
                    ).Skip(100).Take(25);
Run Code Online (Sandbox Code Playgroud)

现在,您可以循环浏览每条记录并分配一个值:

foreach(var record in listings)
{
   record.ProperyType = "Home";
}
Run Code Online (Sandbox Code Playgroud)

还有其他方法也可以做到这一点(例如,假设您使用的是EF),例如,如果您使用的是原始SQL,则可以将结果类型直接转换为新类型(无需在每个字段中都具有映射),但这应该可以你开始了。