2012-07-09 102 views
0

因此,我刚刚开始使用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); 

这个伟大的工程,但我想在结果列表中添加值。基本上我想要做的是这样的:

foreach (var item in listings) 
{ 
    this.Add("propertyType", "Home"); 
} 

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

+0

不知道你是什么意思 - 你是否想要选择多个东西,沿着'(从db.tblListings中的s选择新的{s,“Home”})''? – Michael 2012-07-09 23:52:55

+0

德里克,你想做什么?我想这个'foreach'是在你的控制器上,而不是在视图上。但是它应该做什么? – 2012-07-10 00:12:58

+0

对不起,如果我不清楚。我基本上试图添加另一个属性到列表中的每个项目。每个项目都有一个属性数组,所以在我的视图的foreach中,我可以执行@ item.propertyType。 propertyType不存在于数据库中,我只是试图将它添加到列表中。 – Derek 2012-07-10 00:29:12

回答

2

是否要将新属性添加到List集合中的每个对象?如果是这样,你可以创建一个新类型,无论从任何对象类型列表中的继承(悬停在listingsQuery变量 - 类型是<>符号内)和新的属性添加到它:

public class MyNewType : ExistingTableType 
{ 
    public string PropertyType { get; set; } 
} 

然后你的查询里面,项目属性到这个新的类型:

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

现在,你可以通过每个记录周期并分配一个值:

foreach(var record in listings) 
{ 
    record.ProperyType = "Home"; 
} 

有一还有其他一些方法(假设你使用EF),例如,如果你使用原始SQL,你可以直接将结果类型转换为新类型(每个字段没有地图),但是这应该会让你开始。

+0

这解决了我的问题原来的问题,但现在当我尝试添加一个我得到的地方“操作符'=='不能应用于类型'Mountainside.Controllers.ListingController.MyNewType'和'string'”的操作数。我在哪里看起来像这样:.Where(listingOnOff => listingOnOff ==“On Mountain”) – Derek 2012-07-10 15:14:21

+1

我想这是因为你没有引用lamda中的实际属性(变量是对象的引用,可以是命名任何东西;它与实际的字段/属性名称无关)。也许是这样的,而不是,.Where(r => r.listingOnOff ==“On Mountain”) – 2012-07-10 15:22:57

+0

工作,谢谢!现在我想我必须弄清楚它为什么起作用。 – Derek 2012-07-10 15:41:58

1

如果你想一个新行添加到您的收藏列表,你需要做的,而不是this.Add

listings.Add如果你希望你的房源收集到修改的值,那么你需要做的

 foreach(var item in listings) 
    { 
     item.PropertyName = value; 
    } 
+0

这是我原本想做的事情,但该属性在数据库中是一个int,而我需要的值是一个字符串。我也无法得到。加入工作。我现在离开我的工作电脑,所以我不确定错误是什么,我明天可以发布。 – Derek 2012-07-10 00:46:17

+0

当我尝试做item.PropertyName =“value”;我得到以下错误消息:'Mountainside.Models.tlbListings'不包含'PropertyName'的定义,并且没有接受类型'Mountainside.Models.tblListings'的第一个参数的扩展方法'PropertyName'可以找到 – Derek 2012-07-10 13:10:47