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();