2010-01-31 62 views
1

可以說我有以下代碼:C#編輯對象在asp.net-MVC

return (from p in repository.GetPostMedia() select p).ToList(); 

但在物體p的值,我想如下注入計算的屬性:

MediaUrl = App.Resource["MediaPath"] + p.Id + "." + p.Ext; 

PS。此代碼位於ASP.NET MVC應用程序的Service部分。它應該生成一個url屬性並將其附加到返回的對象。如果控制器是把這種邏輯的最佳位置,我將如何做到這一點與我的代碼如下:

public ActionResult PostMediaList(int postId) 
{ 
    var media = postService.GetMedia(); //the call to the code above. 

    return Json(media); 
} 

媒體從生成LINQ庫中的SQL語句。另外,我希望能夠更改以後存儲媒體文件的路徑,只需更改Web項目或服務項目。

+0

爲什麼不添加返回MediaUrl到媒體類的屬性? – mxmissile 2010-01-31 05:04:11

+0

沒有媒體類。它從linq生成sql。 – 2010-01-31 05:05:29

回答

1

從我的理解你的問題,你可以返回一個匿名類型,而不是任何p是。

return (from p in repository.GetPostMedia() 
     select new { Media = p, 
        MediaUrl = App.Resource["MediaPath"] + p.Id + "." + p.Ext }).ToList(); 
+0

那就是我在找的,謝謝。 – 2010-01-31 05:36:57

+0

這個函數的返回類型是什麼?沒有辦法在其他地方獲得房產。 – Sapph 2010-01-31 05:38:00

+0

@Sapph:是的,沒有做一些討厭的return-object-then-cast-to-whatever,這個解決方案可能不會直接工作,但看起來Shawn只是在尋找某人指向他存在匿名類型。 – Tanzelax 2010-01-31 06:47:38

0

創建你想要的屬性包裝類,並返回類的集合與您的查詢。

非常,非常基本的和骨骼例如:

class MyMedia 
{ 
    public MyMedia(Media m) 
    { 
     this.Media = m; 
     this.MediaUrl = App.Resource["MediaPath"] + m.Id + "." + m.Ext; 
    } 

    public Media Media 
    { 
     get; set; 
    } 

    public string MediaUrl 
    { 
     get; set; 
    } 
} 

,然後在你的方法:

return (from p in repository.GetPostMedia() select new MyMedia(p)).ToList();