为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼如林 2019-11-30 13:45:28
我有一个标准的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 };    }
查看完整描述

3 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您不能在C#中键入任何方法作为匿名类型的显式类型。可以说它们不能被“命名”,因此不能出现在元数据签名中。

如果您确实要返回匿名类型的值,则有2个选项

  1. 方法的返回类型为System.Object。然后,您可以使用其他方法进行邪恶的强制转换以获取类型化的值。这是非常脆弱的,我不建议这样做。

  2. 使用通用方法和类型推断技巧来获取正确的返回类型。对于您的方法,这将需要一个非常有趣的签名定义。

匿名类型并不是真的应该以这种方式传递。此时,您需要以这种方式在函数之间传递它们,最好是显式定义一个类型。


查看完整回答
反对 回复 2019-11-30
?
12345678_0001

TA贡献1802条经验 获得超5个赞

使用var不会使其成为匿名类型。使用var just意味着将此变量设置为赋值右侧的可用类型。这只是短手。如果右边的东西是一个实类,则该变量将属于该类型。


例如:


var person = new Person { Name = "bob" };

即使使用var关键字,person变量的类型也为Person。


匿名类型是使用新的{Name = ...}创建的。在这种情况下,它是一个新的匿名类。唯一可以分配给它的是使用var(或对象)定义的变量,因为没有可用的现有名称。


例如:


var person = new { Name = "bob" };

在这种情况下,person是在运行时定义的匿名类型。


通常,正如@Chalkey所说,如果要将结果传递回另一种方法,请使用命名类型,而不是匿名类型。


如果您被迫使用匿名类型,则必须将其作为类型的对象传递回去Object,然后使用反射来获取其属性。


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信