【问题标题】:How can I get Column B's value based on Column A matching a given value in a datatable?如何根据与数据表中给定值匹配的 A 列获取 B 列的值?
【发布时间】:2023-03-10 05:24:01
【问题描述】:

我想在 A 列 =“123”的第一行中获取 B 列的值。

我试过了:

dataTable.AsEnumerable().Select(row => row["value"].ToString() == "123").ToString();

但我得到 表达式不能包含 lambda 表达式

任何帮助将不胜感激,谢谢。

编辑:

我基本上是在寻找 SQL 等价物:

Select ColumnB
From MyTable
Where ColumnA = '123'

对于使用 lambda 表达式的数据表。

【问题讨论】:

    标签: .net-3.5 lambda datatable


    【解决方案1】:

    看看FirstOrDefault method

    var foundRow = dataTable.AsEnumerable().FirstOrDefault(row => string.Equals (row["ColumnA"].ToString(), "123", StringComparison.OrdinalIgnoreCase ));
    if (foundRow != null) {
        // We found a match, do something with it.
        var colBValue = foundRow["ColumnB"].ToString(); 
    }
    

    FirstOrDefault 返回与指定条件匹配的第一个元素,在这种情况下,它会在 DataTable 的 [ColumnA] 列中查找字符串“123”。如果没有元素符合条件,FirstOrDefault 返回对象的默认值,DataTable 为null

    我不知道你为什么会得到你显示的异常,当我试图重现它时我没有。

    【讨论】:

    • 工作就像一个魅力。谢谢,杰。
    • @Yatrix 很高兴我能提供帮助。
    【解决方案2】:

    我相信您正在寻找Where 方法

    dataTable.AsEnumerable().Select(row=>row["Value"].ToString()).Where(row => row["value"].ToString() == "123");
    

    【讨论】:

    • 好吧,我想我必须将列的值转换为字符串。也许不吧。 =)
    • select 中的 lambda 是结果的投影(ToString),Where 中的 lambda 是结果的谓词,换句话说 what 返回。
    • 这不起作用。我编辑了我的问题,以防我想要什么不清楚。
    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多