我在我的控制器上有这个Linq查询,它会在List中给我一个对象,我需要将这个对象传递给一个函数,即在另一个类中,它会消耗它。
这是我的Linq查询:
var cursos = (from c in db.Curso
join cc in db.CursoCategoria on c.cursoCategoriaId equals cc.ID
where c.ativo == 1 && c.destaque == 1
select new { ID = c.ID,
nome = c.nome,
imgAbre = c.imagemAbre,
imgFecha = c.imagemEfeito,
cURL = c.URL,
ccURL = cc.URL,
cCor = cc.cor}).Take(10).ToList();
这就是我调用函数的方式:
var objHelper = new HelperController();
siteVM.lstCursosWall = Json(objHelper.MontaWallCurso());
这是我在HelperController中的函数,这个类也是一个控制器,我这样做是因为我有几个辅助函数和项目的ajax方法:
public string MontaWallCurso()
{
//TODO STUFF
}
那么,如果我没有类型,我怎么能传递这个对象?
注意:我正在使用我使用EF从我的数据库创建的DAL模型,不知道这是否有用。
提前致谢
修改
所以我改变了我的方法并创建了一个类来填充和传输数据,但现在我遇到了将linq结果传递给对象的问题。
var siteVM = new SiteViewModel();
var cursos = new List<CursoWall>();
var lCursos = (from c in db.Curso
join cc in db.CursoCategoria on c.cursoCategoriaId equals cc.ID
where c.ativo == 1 && c.destaque == 1
select new { ID = c.ID,
nome = c.nome,
imgAbre = c.imagemAbre,
imgFecha = c.imagemEfeito,
cURL = c.URL,
ccURL = cc.URL,
cCor = cc.cor}).Take(10).ToList();
cursos.AddRange(lCursos);
班级:
public class CursoWall
{
public int ID { get; set; }
public string nome { get; set; }
public string imgAbre { get; set; }
public string imgFecha { get; set; }
public string cURL { get; set; }
public string ccURL { get; set; }
public string cCor { get; set; }
}
答案 0 :(得分:2)
你不能。你需要定义一个简单的Poco&#39;在这种情况下,DTO的类型用于数据传输。
http://rlacovara.blogspot.nl/2009/03/what-is-difference-between-dto-and-poco.html
答案 1 :(得分:2)
如果您愿意牺牲类型安全性,可以使用C#的动态支持。
public string MontaWallCurso(IList<dynamic> cursos) {
// use dynamic properties or something that takes dynamic arguments
foreach( dynamic curso in cursos ) {
curso.SomePropertyYouAreSureExists = 1;
curso.SomeMethodYouAreSureExists();
}
}
或者,如果您愿意牺牲类型安全并解决问题,您可以使用反射。在某些情况下,您可以间接地执行此操作,例如JSON转换器或其他依赖于反射的库代码。
public string MontaWallCurso(IList<object> cursos) {
// use reflection or something that uses reflection itself
foreach( object curso in cursos ) {
Type cursoType = curso.GetType();
cursoType.GetProperty("SomePropertyYouAreSureExists").SetValue( curso, 1 );
cursoType.GetProperty("SomeMethodYouAreSureExists").Invoke( curso, null );
}
}
为了澄清这些方法,我唯一可能推荐的方法是基于图书馆的反思,如果它适用的话。