1

我试图在运行时从 LINQ 查询返回的 DataTable 中煮沸我的树视图。返回的字段是:

名称 = CaseNoteID | 联系日期 | ParentNote 类型 = 指导 | 日期时间 | 指导

ParentNote 字段与 CaseNoteID 列中的条目匹配。Select(filter) 给了我找不到列 [ea8428e4] 的运行时错误。该字母数字是其中一个指南的第一部分。当我通过我的代码过滤器="ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"

我错过了什么?

var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote="+tmpCNoteID;

                DataRow[] childRows = cNoteDT.Select(filter);
4

4 回答 4

7

尝试用单引号将 GUID 括起来:

var filter = "ParentNote='"+tmpCNoteID+"'";
于 2009-05-01T19:02:47.697 回答
1

这应该工作:

   var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote=\""+tmpCNoteID+"\"";

                DataRow[] childRows = cNoteDT.Select(filter);
于 2009-05-01T19:09:53.360 回答
1

我知道这是一个旧线程,但我想添加一个附录。当使用带有 Guid 的 IN 运算符时(例如:ParentNote IN ( , , 等 ) ),不再接受单引号。在这种情况下,必须使用 CONVERT 方法(granadaCoder 建议)。(单引号引发了一个例外,即使用 '=' 运算符将 Guid 与字符串进行比较......我们实际上没有使用它。)

详细信息:我继承了一些遗留代码,这些代码构建了一个大的过滤器字符串,格式如下: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....

当 guid 的数量(以及 OR 子句的数量)变得太大时,这会导致堆栈溢出异常。通过用 IN 子句替换大量 OR 子句,我能够毫无例外地设置过滤器。但是使用 IN 子句意味着必须使用 CONVERT 方法。

于 2017-08-18T14:38:56.583 回答
0

这是我使用的一种方法:

            MyStrongDataSet ds = new MyStrongDataSet();
            Guid myUuid = new Guid("11111111-2222-3333-4444-555555555555");

            System.Data.DataRow[] rows = ds.MyStrongTable.Select("MyGuidProperty = (CONVERT('" + myUuid.ToString("N") + "', 'System.Guid'))");


            //Fish out a single row if need be and cast to a strong row
            if (null != rows)
            {
                if (rows.Length > 0)
                {
                    MyStrongDataSet.MyStrongTableRow returnRow = rows[0] as MyStrongDataSet.MyStrongTableRow;
                    return returnRow;

                }
            }
            return null;

这是一个细微的变化:

  string filterSql = "MyGuidProperty ='{0}'";

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
于 2011-04-21T20:56:08.070 回答