我正在尝试使用数据表中的行填充客户模型,但无法正确获取语法。原始代码取自本教程Your First ASP.NET Web API (C#)。
我已经向控制器添加了一个DataTable,但是我无法弄清楚如何将表中的行放入我的客户模型中。我认为我可以用foreach做到这一点,但正如我所说,我无法使语法正确。这就是我所拥有的
Customer[] customers = new Customer[]
{
//new Customer {Id = "123", FirstName = "Buk", LastName = "Hix" }
// Replace hard coded customer information with foreach loop.
//commented out because it causes compile warnings
//foreach (DataRow row in GetAllData().Rows)
//{
// yield return new Customer
// {
// CustomerId = Convert.ToString(row["CustomerId"]),
// FirstName = Convert.ToString(row["FirstName"]),
// LastName = Convert.ToString(row["LastName"])
// };
//}
};
public IEnumerable<Customer> GetAllCustomers()
{
return customers;
}
完成我想要做的事情的最佳方法是什么?
答案 0 :(得分:2)
您可以使用LINQ:
Customer[] customers = GetAllData()
.Rows
.Cast<DataRow>()
.Select(row => new Customer
{
CustomerId = Convert.ToString(row["CustomerId"]),
FirstName = Convert.ToString(row["FirstName"]),
LastName = Convert.ToString(row["LastName"])
})
.ToArray();
确保您已将System.Linq
添加到using
指令中,以便将扩展方法纳入范围。
答案 1 :(得分:1)
你很亲密。在创建迭代器(一个返回使用yield
的IEnumerable / IEnumerator的函数)时,您只需根据需要将代码放入正文中yield
。无需将它们扔进另一个集合中。编译器将为代码生成一个迭代器。
public IEnumerable<Customer> GetAllCustomers()
{
foreach (DataRow row in GetAllData().Rows)
{
yield return new Customer
{
CustomerId = row.Field<string>("CustomerId"),
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName"),
};
}
}
如果你对它开放,那么在这里使用LINQ会更好。
public IEnumerable<Customer> GetAllCustomers()
{
return
from row in GetAllData().Rows
select new Customer
{
CustomerId = row.Field<string>("CustomerId"),
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName"),
};
}