在Lambda表达式中使用Let查询数据表
本文关键字:Let 查询 数据表 Lambda 表达式 | 更新日期: 2023-09-27 18:07:50
我有一个数据表,我需要将该数据表的内容转换为类列表,我使用Linq。效果很好。但是我被要求将linq查询转换为Lambda表达式,在使用Let时我遇到了一点麻烦。我将使用示例代码。
Working linq query:
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();
正如你所看到的,在将数据转换为我之前所做的列表之前,我必须检查一些条件。请一定帮我解决这个问题。
您传递给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();
在这种情况下我们可以使用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();
我试了样品,它可以按你的需要工作。
谢谢,哈