LINQ查询不返回字符串比较中的行

时间:2013-04-30 19:09:44

标签: c# linq

我是编写LINQ查询的新手,我在使用字符串比较时遇到了麻烦。我正在将数据加载到DataTable中(确认SQL DB和DataTable中的表具有相同的行数),但由于某种原因,我无法找到我知道的值。

文本框包含'servername',而数据行包含'servername.mydomain.net',所以这是我的代码看起来像

string strParameter = txtAutoComplete.ToString().ToLower();

    //WUG TableAdapter and DataTable
    dsCIInfoTableAdapters.DeviceTableAdapter taWUG;
    taWUG = new dsCIInfoTableAdapters.DeviceTableAdapter();

    dsCIInfo.DeviceDataTable dtWUG = new dsCIInfo.DeviceDataTable();
    taWUG.Fill(dtWUG);

    var qstWUG = (from row in dtWUG.AsEnumerable()
                  where row.Field<string>("sDisplayName").ToLower().Contains(strParameter)
                  select row.Field<string>("sDisplayName"));

3 个答案:

答案 0 :(得分:0)

在你的LINQ语句中相信dtWUG需要是dtWUG.AsEnumerable()。 Linq仅适用于实现IEnumerable接口的数据源。

答案 1 :(得分:0)

如果添加一些可以添加断点的let语句,则可以更轻松地调试它:

    var qstWUG = (from row in dtWUG
                  let display = row.Field<string>("sDisplayName")
                  let lower = display.ToLower()
                  let contains = lower.Contains(strParameter)
                  where contains
                  select display).ToArray();

最后使用.ToArray()将其转换为数组,将使其立即执行(LINQ由范例延迟,直到需要时才执行),并且在后续断点中也更容易查看。

答案 2 :(得分:0)

是的,我感到愚蠢......我忘了使用textbox.text将其分配给字符串

string strParameter = txtAutoComplete.Text.ToLower();


        //WUG TableAdapter and DataTable
        dsCIInfoTableAdapters.DeviceTableAdapter taWUG;
        taWUG = new dsCIInfoTableAdapters.DeviceTableAdapter();

        dsCIInfo.DeviceDataTable dtWUG = new dsCIInfo.DeviceDataTable();
        taWUG.Fill(dtWUG);

        var qstWUG = (from row in dtWUG.AsEnumerable()
                      let display = row.Field<string>("sDisplayName")
                      where display.ToLower().Contains(strParameter)
                      select display).ToArray();