【问题标题】:Error in Conversion from Generic List<Datarow> to Generic List<string>从通用列表<Datarow> 转换为通用列表<string> 时出错
【发布时间】:2013-03-07 07:32:12
【问题描述】:

我有下面的代码

List<string> esfa = NewTable.AsEnumerable().Where(row => row.Field<string>("Select")   
=="true").ToList();

编译时出错

无法将类型 'System.Collections.Generic.List&lt;System.Data.Datarow&gt;' 隐式转换为 'System.Collections.Generic.List&lt;string&gt;'

请帮忙。

【问题讨论】:

    标签: c# .net linq compiler-errors


    【解决方案1】:

    嗯,是的。您正在通过Select 字段过滤 - 但该过滤的结果仍然是一系列行。我希望这是你想要的 - 毕竟,你知道每一行中 Select 字段的值,所以这不会很有趣......

    我想你可能只是想要:

    List<DataRow> rows = NewTable.AsEnumerable()
                                 .Where(row => row.Field<string>("Select") == "true")
                                 .ToList();
    

    (请注意,像这样将代码分成多行可以极大地提高可读性。)

    如果你真的想要其他字段的值,你可能想要这样的东西:

    List<string> rows = NewTable.AsEnumerable()
                                .Where(row => row.Field<string>("Select") == "true")
                                .Select(row => row.Field<string>("LastName"))
                                .ToList();
    

    【讨论】:

    • 谢谢乔恩,我想这就是我要找的东西
    【解决方案2】:

    试试这个:

    List<string> esfa = db.AsEnumerable()
                          .Where(row => row.Field<string>("Select") == "true")
                          .Select(s => s.Field<string>("Select"))
                          .ToList();
    

    linq .Select 使您可以选择当前集合的任何属性。使用“选择”列以外的任何其他有用字段。

    【讨论】:

    • 这不太可能有用,因为它将是“true”、“true”、“true”、“true”、...的列表
    • 只是给他一个关于.Select的想法:)
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2012-10-06
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多