如何返回从C#方法使用LINQ to SQL [复制]匿名类型如何返回从C#方法使用LINQ to

2019-05-14 10:43发布

可能重复:
LINQ to SQL的:返回匿名类型?

我有一个标准的LINQ到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 };
    }

Answer 1:

使匿名类型为一类...

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
    }


Answer 2:

你不能在C#中键入任何方法是显式类型的匿名类型。 他们不能被“点名”可以这么说,因此不能出现在元数据签名。

如果你真的想返回的值是一个匿名类型有2个选项

  1. 有方法的返回类型是System.Object的。 然后,您可以助纣为虐铸造黑客获得的另一种方法的输入值。 这是脆弱的,我不建议这样做。
  2. 使用泛型方法和类型推断的手段来得到的返回类型正确。 这将需要为你的方法一个非常有趣的签名定义。

匿名类型并没有真正意味着以这种方式被传来传去。 在你需要以这种方式你的函数之间传递他们周围的点,你最好明确定义类型。



Answer 3:

使用VAR并不能使它匿名类型。 使用VAR只是意味着让这个变量的赋值的右侧可用的类型。 这只是短暂的手。 如果在右边的东西是真正的类,变量将是此类型。

例如:

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

该人士变量的类型的人,即使它使用了var关键字。

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

例如:

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

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

一般来说,@Chalkey说,如果你想通过结果反馈给另一种方法,使用名为类型,而不是匿名的。

如果你被迫使用匿名类型,你必须通过它背照式的目标Object ,然后使用反射来得到它的属性。



Answer 4:

乔恩斯基特写了一篇关于如何做到这一点,这是非常正确题为博客可怕地难看哈克 。 正如标题所暗示的,你真的不应该想办法返回一个匿名类型。 相反,你应该建立,因为这是实现此功能的正确方法可以返回一个类型。

因此,我建议你创建要返回的类型的具体定义,然后填充,在查询要返回它。



Answer 5:

它种取决于调用代码将如何使用这些数据。

如果你正在做简单的数据绑定,真的不关心类型(即你没有在你的C#代码来显式访问属性),你可以将结果传递回为IEnumberable。

在大多数情况下,数据绑定您呼叫的名称的属性,通过神奇的字符串,无论如何,所以确切的类型不怎样都无所谓。

否则,您需要将匿名类型转换为命名类型。



Answer 6:

如果你必须通过周围产生一个大的应用程序,你可以使用字典。 是的,你有一些开销铸造时,但至少你减少你扔掉的对象。



文章来源: How to return anonymous type from c# method that uses LINQ to SQL [duplicate]