C# LINQ返回一个值IEnumerable

C# LINQ返回一个值IEnumerable,c#,linq,pipeline,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(';').Selec

可以使用返回类型返回下面这样的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表达式在末尾返回一个注释性对象。因此,不能使用string作为方法的返回类型

您可以使用dynamic作为类型

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) });

}

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

您试过运行它来找出答案吗?您的意思是什么?您想要用查询语法编写的内容,还是尝试从方法返回IEnumerable?如果第二次需要声明类型,只需返回
IEnumerable
。如果是第一个,则需要在剪切日期字符串之前对其进行修剪:
DateTime.ParseExact(n[1].Trim()
@JamesCurran很好。如果不这样做,ParseExact将失败。我更新了答案。非常感谢您的帮助。非常感谢。
var s = "sean oneill, 26/06/1985; matt sheridan, 22/09/1984; Jenny Hutching, 21/03/1972";

var result = ParseDateOfBirth(s);