ASP.NET:使用Linq在查询中选择多个值

时间:2011-08-09 18:12:12

标签: asp.net sql linq anonymous-types

我需要返回一个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;

但它给了我一个错误...... 我怎么能解决它?

提前致谢!

3 个答案:

答案 0 :(得分:3)

您的方法返回IEnumerable<string>。您已将返回值更改为新的匿名类型,而不是字符串集合。

要修复,你可以:

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

答案 1 :(得分:1)

它不再是IEnumerable<String>。您必须返回IEnumerable<object>以从查询中返回匿名类型。

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

答案 2 :(得分:0)

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