LINQ返回一个值IEnumerable

时间:2016-07-21 20:53:20

标签: c# linq pipeline

是否可以使用返回类型返回如下所示的linq查询,或者它是否只是像foreach语句一样只读它?

谢谢!

var s = "sean oneill, 26/06/1985; matt sheridan, 22/09/1984; Jenny Hutching, 21/03/1972";

var s9 = ParseDateOfBirth(s);

private string ParseDateOfBirth(string info)
{
       return info.Split(';').Select(n => n.Split(',')).Select(n => new { name = n[0].Trim(), datetime = DateTime.ParseExact(n[1], "d/M/yyyy", CultureInfo.InvariantCulture)});
}

1 个答案:

答案 0 :(得分:2)

你的linq表达式在结尾处返回一个匿名对象。所以你不能使用string作为你方法的返回类型。

您可以使用动态作为类型

private dynamic ParseDateOfBirth(string info)
{
        return info.Split(';')
           .Select(n => n.Split(','))
           .Select(n => new { 
                     name = n[0].Trim(), 
                     datetime = DateTime.ParseExact(n[1].Trim(), 
                                                    "d/M/yyyy",
                                                     CultureInfo.InvariantCulture) });
 }

甚至更好,创建一个DTO来表示您要返回的数据并使用

public class UserInfo
{
  public string Name { set; get; }
  public DateTime Datetime { set; get; }        
}

private IEnumerable<UserInfo> ParseDateOfBirth(string info)
{
   return info.Split(';').Select(n => n.Split(','))
              .Select(n => new UserInfo  { 
                          Name = n[0].Trim(), 
                          Datetime = DateTime.ParseExact(n[1].Trim(), 
                                             "d/M/yyyy", CultureInfo.InvariantCulture) });

}

现在,当您使用输入

调用此方法时
var s = "sean oneill, 26/06/1985; matt sheridan, 22/09/1984; Jenny Hutching, 21/03/1972";

var result = ParseDateOfBirth(s);

变量result将是3个UserInfo个对象的集合。