在从数据表查询时使用Let in Lambda Expression

时间:2015-08-14 07:09:19

标签: c# linq lambda

我有一个数据表,我需要将该数据表的内容转换为类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();

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

2 个答案:

答案 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();    

我尝试了它可以根据需要使用的样本。

谢谢, 纳拉辛哈