繁体   English   中英

LINQ返回值IEnumerable

[英]LINQ return a value IEnumerable

是否可以使用返回类型返回如下所示的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)});
}

您的linq表达式最后返回一个匿名对象。 因此,不能将字符串用作方法的返回类型。

您可以使用动态类型

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对象的集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM