【问题标题】:C#: How can I select specific rows from the ResultsTable returned from a KeywordQuery?C#:如何从 KeywordQuery 返回的 ResultsTable 中选择特定行?
【发布时间】:2013-09-06 13:01:21
【问题描述】:

我正在尝试对 Sharepoint 列表执行两次搜索。在第一遍中,我使用 KeywordQuery 来搜索所有项目的索引。在第二遍中,我通过构建一个 select 语句来应用用户选择的列值过滤器。

ResultTableCollection rtc = kwqry.Execute(); 
ResultTable rt = rtc[ResultType.RelevantResults]; 
dt = new DataTable(); 
//Load Data Table 
dt.Load(rt, LoadOption.OverwriteChanges); 
DataRow[] rows = dt.Select("ColumnName1 = 'foo' AND ColumnName2 = 'bar'"); 

这些列可以是 Sharepoint 列表中的多值查找列。第一遍工作正常,并在 DataTable 中返回正确数量的匹配项。但是,当我尝试应用 Select 语句时,出现以下错误:Cannot perform '=' operation on System.String[] and System.String。将列转换为字符串而不是字符串数组会导致相同的错误,就像使用 IN 运算符一样。

我是否错误地构建了我的选择语句?如何在我的 DataTable 上运行我的第二个过滤器?

【问题讨论】:

    标签: c# sharepoint-2010 keyword-search


    【解决方案1】:

    你尝试过 LINQ 吗?

    DataTable t1 = new DataTable();
    var rows = from x in t1.AsEnumerable()
               where x.Field<string[]>("column1name").Contains("foo")
               select x;
    

    你必须在 Where 子句中指定字段类型...

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      尝试使用它,它会起作用:

      DataRow[] rows = dt.Select("(ColumnName1 = 'foo' AND ColumnName2 = 'bar')");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多