如何从使用LINQ的c#方法返回匿名类型到SQL

我有一个标准的LINQ to SQL查询,该查询以匿名类型返回数据(包含大约6列各种数据类型的数据)。


我想使此返回的对象可用于程序的其他部分,方法是将其返回给方法调用者,或者将其分配给包含该方法的对象的属性。


鉴于它是匿名类型(“ var”),我该怎么做?


编辑-这是代码:


    using (ormDataContext context = new ormDataContext(connStr))

    {

        var electionInfo = from t1 in context.elections

                   join t2 in context.election_status

                   on t1.statusID equals t2.statusID

                   select new { t1, t2 };

    }


呼如林
浏览 609回答 3
3回答

慕盖茨4494581

您不能在C#中键入任何方法作为匿名类型的显式类型。可以说它们不能被“命名”,因此不能出现在元数据签名中。如果您确实要返回匿名类型的值,则有2个选项方法的返回类型为System.Object。然后,您可以使用其他方法进行邪恶的强制转换以获取类型化的值。这是非常脆弱的,我不建议这样做。使用通用方法和类型推断技巧来获取正确的返回类型。对于您的方法,这将需要一个非常有趣的签名定义。匿名类型并不是真的应该以这种方式传递。此时,您需要以这种方式在函数之间传递它们,最好是显式定义一个类型。

12345678_0001

使用var不会使其成为匿名类型。使用var just意味着将此变量设置为赋值右侧的可用类型。这只是短手。如果右边的东西是一个实类,则该变量将属于该类型。例如:var person = new Person { Name = "bob" };即使使用var关键字,person变量的类型也为Person。匿名类型是使用新的{Name = ...}创建的。在这种情况下,它是一个新的匿名类。唯一可以分配给它的是使用var(或对象)定义的变量,因为没有可用的现有名称。例如:var person = new { Name = "bob" };在这种情况下,person是在运行时定义的匿名类型。通常,正如@Chalkey所说,如果要将结果传递回另一种方法,请使用命名类型,而不是匿名类型。如果您被迫使用匿名类型,则必须将其作为类型的对象传递回去Object,然后使用反射来获取其属性。
打开App,查看更多内容
随时随地看视频慕课网APP