我有一个数据表,我需要将该数据表的内容转换为类List,我使用了Linq。它运行良好。但我被要求将该linq查询转换为Lambda Expression并且我有使用Let.I时会遇到一些麻烦。示例代码。
使用linq查询:
var NewUser = (from dt in dsMappedDataFields.Tables[0].Rows.Cast<DataRow>()
let tempDetails = dt.Field<string>("Name") == "Rojer" ? "NW" : "India"
let tempNumber = tempDetails == "India" ? "918956" : "0456"
select new User
{
Name = dt.Field<string>("Name"),
Age = dt.Field<int>("Age"),
Details = tempDetails,
Number = tempNumber
}).ToList();
Lambda表达式:
var User = dsMappedDataFields.Tables[0].Rows.Cast<DataRow>().
Select(dr =>
new User
{
Name = dr.Field<string>("Name"),
Age = dr.Field<int>("Age"),
Details = dr.Field<string>("Details"),
Number = dr.Field<string>("Number")
}).ToList();
正如您所看到的,在将数据转换为我之前所做的列表之前,我必须检查一些条件。请帮我解决此问题。
答案 0 :(得分:3)
传递给Select
的lambda可以有一个块,所以你可以在那里添加任何类型的代码:
var User = dsMappedDataFields.Tables[0].Rows.Cast<DataRow>().Select(dr =>
{
var tempDetails = dt.Field<string>("Name") == "Rojer" ? "NW" : "India";
var tempNumber = tempDetails == "India" ? "918956" : "0456";
return new User
{
Name = dr.Field<string>("Name"),
Age = dr.Field<int>("Age"),
Details = tempDetails,
Number = tempNumber
}
}).ToList();
答案 1 :(得分:-1)
在这种情况下我们可以使用lambda表达式:
var User = dsMappedDataFields.Tables[0].Rows.Cast <DataRow>().
Select(dr = > new User {
Name = dr.Field<string>("Name"),
Age = dr.Field<int>("Age"),
Details = dr.Field<string>("Name") == "Rojer" ? "NW" : "India",
Number = dr.Field<string>("Name") == "Rojer" ? 0456 : 918956,
}).ToList();
我尝试了它可以根据需要使用的样本。
谢谢, 纳拉辛哈