首页 > 解决方案 > 如何将匿名类型变量从使用范围传播到外部?

问题描述

// var outterResult = null;

using (var ctx = new TIS2APPContext())
{
    var results = (
        from t in (
            from route in ctx.ROUTEs
            join rstop in ctx.RSTOPs on route.ROUTEID equals rstop.ROUTEID
            join stop in ctx.STOPs on rstop.STOPID equals stop.STOPID
            select new { Route = route, RStop = rstop, Stop = stop }
        ).ToArray()
        group new { RStop = t.RStop, Stop = t.Stop } by t.Route into g
        select new { Route = g.Key, Stops = g.ToArray() }
    ).ToArray();
}

假设我在一个using范围内有一个复杂的 LINQ 结果。有没有办法让它逃到外面的世界?重点是匿名类型,在这种情况下我不打算创建一个实际的类。

提前致谢。

标签: c#linqtypesscopeanonymous-types

解决方案


您不能为匿名对象声明类型,但是如果您在外部范围内使用具有相同字段的匿名对象,则可以给它一个提示。字段可以有虚拟值。

但是,您仍然受限于执行方法的范围。要在方法之外使用它,您需要将结果映射到元组,如果您不想使用类

var results = new[]
{
    new { Route = string.Empty, Stops = new List<string>() }
};

using (var db = new DbContext(""))
{
    results = (from o in db.Set<object>()
                    select new { Route = string.Empty, Stops = new List<string>() }
                    ).ToArray();
}

推荐阅读