alc*_*cal 44 c# linq anonymous-types linq-to-sql
可能重复:
LINQ to 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 };
    }
小智 65
将匿名类型转换为类...
public class Person
{
    public Person() {
    }
    public String Name { get; set; }
    public DateTime DOB { get; set; }
}
Person p = 
    from person in db.People 
    where person.Id = 1 
    select new Person { 
        Name = person.Name,
        DOB = person.DateOfBirth
    }
Jar*_*Par 19
您不能在C#中键入任何方法作为匿名类型的显式类型.它们不能被"命名",因此不能出现在元数据签名中.
如果你真的想要返回一个匿名类型的值,有2个选项
匿名类型并不是真正意味着以这种方式传递.在您需要以这种方式在函数之间传递它们时,最好明确定义类型.
使用var不会使它成为匿名类型.使用var只意味着让这个变量属于赋值右侧的可用类型.这只是空手而已.如果右侧的东西是真正的类,则该变量将属于该类型.
例如:
var person = new Person { Name = "bob" };
person变量的类型为Person,即使它使用了var关键字.
使用新的{Name = ...}创建匿名类型.在这种情况下,它是一个新的匿名类.您可以将其分配给的唯一内容是使用var(或object)定义的变量,因为没有可用的现有名称.
例如:
var person = new { Name = "bob" };
在这种情况下,person是在运行时定义的匿名类型.
通常,正如@Chalkey所说,如果要将结果传递回另一个方法,请使用命名类型,而不是匿名类型.
如果您被迫使用匿名类型,则必须将其作为类型的对象传回Object,然后使用反射来获取它的属性.
Jon Skeet写了一篇关于如何做到这一点的博客,这篇文章非常正确地名为Horribly Grotty Hack.正如标题所示,你真的不应该寻找返回匿名类型的方法.相反,您应该创建一个可以返回的类型,因为这是实现此功能的正确方法.
因此,我建议您创建要返回的类型的具体定义,然后在查询中填充该类型以便返回它.
| 归档时间: | 
 | 
| 查看次数: | 78306 次 | 
| 最近记录: |