【问题标题】:ASP.NET : select multiple values in query using LinqASP.NET:使用 Linq 在查询中选择多个值
【发布时间】:2011-08-09 18:12:11
【问题描述】:

我需要返回一个 IEnumerable。 这是工作代码:

public IEnumerable<String> ReturnStudentsAsString(int vak, int klasgroep)
    {
        return (from s in Students
                orderby s.Naam, s.Voornaam
                select s.Naam);
    }

效果很好! 现在,我还想返回街道和邮政编码...... 所以我创建了一个匿名类型:

public IEnumerable<String> ReturnStudentsAsString(int vak, int klasgroep)
    {
        var test = (from s in Studenten
                orderby s.Naam, s.Voornaam
                select new 
                {
                    StudentNumber = s.StudentNumber,
                    Name = s.Name,
                    Street = s.Street,
                    PostalCode = s.PostalCode,
                    City = s.City
                });
        return test;

但它给了我一个错误...... 我该如何解决?

提前致谢!

【问题讨论】:

    标签: asp.net sql linq anonymous-types


    【解决方案1】:

    您的方法返回一个IEnumerable&lt;string&gt;。您已将返回值更改为新的匿名类型,而不是字符串集合。

    要修复,您可以:

    • 创建一个类,实例化并返回IEnumerable&lt;MyClass&gt;(首选!)
    • 如果您使用的是 .NET 4,则返回 IEnumerable&lt;dynamic&gt;。并且您不关心调用堆栈的静态类型。

    【讨论】:

      【解决方案2】:

      它不再是IEnumerable&lt;String&gt;。您必须返回 IEnumerable&lt;object&gt; 才能将匿名类型从您的查询中传回。

      编辑:正如其他人所建议的,更好的方法可能是定义一个静态类型来保存您想要返回的值。或者,由于这基本上是一个单行查询,因此您可以在任何使用此方法的地方进行内联查询,而不是为其创建专门的方法。

      【讨论】:

        【解决方案3】:

        错误是因为您的返回类型声明为IEnumerable&lt;String&gt;。您不再返回可枚举的字符串。您正在尝试返回一个匿名类型,这是可能的,但它是 hacky。相反,您应该创建一个新类型,可能是Address,其中包含您需要的所有成员。您还应该重命名您的方法,因为它不再返回字符串,而是具有多个成员的复杂类型。如果您使用的是 .NET 4,您还可以将返回类型更改为 IEnumerable&lt;dynamic&gt;,但我认为创建新类型仍然是更好的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-15
          • 2017-01-06
          • 1970-01-01
          • 1970-01-01
          • 2015-03-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多