在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();

正如你所看到的,在将数据转换为我之前所做的列表之前,我必须检查一些条件。请一定帮我解决这个问题。

在Lambda表达式中使用Let查询数据表

您传递给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();    

我试了样品,它可以按你的需要工作。

谢谢,哈