如何将linq var数据类型传递给方法?

时间:2011-06-30 23:08:10

标签: c# asp.net linq linq-to-sql datagrid

  

可能重复:
  How can I pass an anonymous type to a method?

我这里有一个可怕的问题,希望你能帮我解决它

有以下linq-to-sql查询,非常简单:

var i = from cr in db.ComprobanteRecepcions  join c in db.Comprobantes
on new { cr.RFC, cr.RFCProveedor, cr.Folio, cr.Serie }  equals new { c.RFC, c.RFCProveedor, c.Folio, c.Serie }
where
Convert.ToString(cr.IDSucursal) == "4" &&
cr.RFC == "FIN020938SVR "
select new { cr.Serie, cr.Folio, cr.IDStatusComp, c.FechaEmision, c.Comentarios, c.Total };

我想把i传递给一个类似

的方法
mymethod void(var a)

当然这不可能......并创建一个Type(类)来返回它,就像这样

select new MyType  {cr.Serie, cr.Folio, cr.IDStatusComp, c.FechaEmision, c.Comentarios, c.Total };

是不切实际的,比如返回XElement或XDocument所以我还能做些什么?我必须使用var i变量填充数据网格,我不知道如何获取这个变量,我也搜索了答案但是没有那么简单...

了解我是使用c#,。net和MS Technologies的新手(我是一名Java程序员)

7 个答案:

答案 0 :(得分:4)

返回类似这样的内容

public class MyType
{
    public ComprobanteRecepcions Recepcions { get;set; }
    public Comprobantes Comprobantes { get;set; }
}

并在你的linq:

select new MyType { Recepcions  = cr, Comprobantes = c }

答案 1 :(得分:2)

试试看:

LINQ: Can I pass a var as a parameter to a method?

或在这里:

Passing the parameter

  

var只能在本地使用   声明并初始化变量   在同一声明中;变量   无法初始化为null或a   方法组或匿名函数。

答案 2 :(得分:1)

最简单的方法是使用一种具体的类型来表示结果(上面的MyType),而不是尝试传递匿名类型。

var实际上仅供本地使用,编译器可以根据使用情况推断类型。一旦你将它传递给另一种方法,你必须使用具体的类型。

(虽然你可以让你的方法以“对象”作为参数,但除非使用反射,否则你将无法用它做很多事情)

答案 3 :(得分:1)

使用.net 4

中的动态关键字
DoStuff(new { Message = "Hello Monkey"}); 

static void DoStuff(dynamic args)  
{                  
    Console.WriteLine(args.Message);  
}

答案 4 :(得分:1)

所以我解决了......感谢我,(很棒的解决方案:

System.Collections.IEnumerable i = from cr in db.ComprobanteRecepcions  join c in  db.Comprobantes
on new { cr.RFC, cr.RFCProveedor, cr.Folio, cr.Serie }  equals new { c.RFC,  c.RFCProveedor, c.Folio, c.Serie }
where
Convert.ToString(cr.IDSucursal) == "4" &&
cr.RFC == "FIN020938SVR "
select new { cr.Serie, cr.Folio, cr.IDStatusComp, c.FechaEmision, c.Comentarios, c.Total  };
return i;

然后在datagrid中我把i作为数据源,绑定它并vo !!

答案 5 :(得分:0)

如果你要传递给它的方法是你自己的,那么根据你想做什么(或者你愿意使用多少反思/惯例,泛型可能是你的答案

private string CheckMeOut<T>( T something )
{
    return something.GetType().Name;
}

public void CheckMeOutTest( )
{
    var anon = ( from x in typeof(string).GetMethods( )
                 select new {x.Name, Returns = x.ReturnType.Name} ).First( );
    string s = CheckMeOut( anon );
    Console.Out.WriteLine( s );
}

答案 6 :(得分:0)

如果您使用的是SQL数据库,您是否考虑过自动从数据库生成数据实体模型(.edmx)?然后你可以处理那里生成的所有类,避免这一切。