2012-07-09 48 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