C# LINQ返回一个值IEnumerable
可以使用返回类型返回下面这样的linq查询,还是像foreach语句一样返回只读查询 谢谢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
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);