我这里有一个可怕的问题,希望你能帮我解决它
有以下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程序员)
答案 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?
或在这里:
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)?然后你可以处理那里生成的所有类,避免这一切。