C# 将linq匿名对象传递给函数

C# 将linq匿名对象传递给函数,c#,.net,asp.net-mvc,linq,asp.net-mvc-3,C#,.net,Asp.net Mvc,Linq,Asp.net Mvc 3,我的控制器上有一个Linq查询,它将给我一个列表中的对象,我需要将这个对象传递给另一个类中的函数,该函数将使用它 这是我的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

我的控制器上有一个Linq查询,它将给我一个列表中的对象,我需要将这个对象传递给另一个类中的函数,该函数将使用它

这是我的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中的函数,这个类也是一个控制器,我之所以这样做是因为我有几个用于项目的helper函数和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);
你不能。在这种情况下,您需要为DTO定义一个简单的“Poco”类型以进行数据传输


如果您愿意牺牲类型安全性,可以使用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 );
    }
}

为了澄清,在这些方法中,我唯一可能推荐的方法是基于库的反射方法(如果适用)。

好的,我创建了他提到的类,但现在我找不到将linq传递给它的方法,我遇到了一个转换问题错误!正在编辑中part@Terkhos-请参阅我对主要问题的评论调用函数时出错:无法从“System.Collections.Generic.List”转换为“System.Collections.Generic.List”;我只测试了数组参数。使用ToArray而不是ToList可以避免您的案例中出现的问题。我之前的评论是针对您代码的预编辑版本的。没问题,但我需要它是一个列表,因为我是如何使用它的,但无论如何还是要感谢您。不要选择new{…请选择new CursoWall,而要选择new CursoWall{…你也可以去掉lCursos变量和AddRange,直接赋值,因为你正在创建一个完美的新列表,谢谢@Hogan。
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 );
    }
}