C# 在DataView的行筛选器中选择DISTINCT

C# 在DataView的行筛选器中选择DISTINCT,c#,sql,dataview,C#,Sql,Dataview,我试图根据与另一个表的关系缩小DataView中的行,我使用的行过滤器如下所示: dv = new DataView(myDS.myTable, "id IN (SELECT DISTINCT parentID FROM myOtherTable)", "name asc", DataViewRowState.CurrentRows); myTable和myOther表通过myTable.ID

我试图根据与另一个表的关系缩小DataView中的行,我使用的行过滤器如下所示:

dv = new DataView(myDS.myTable,
                 "id IN (SELECT DISTINCT parentID FROM myOtherTable)",
                 "name asc",
                 DataViewRowState.CurrentRows);
myTable和myOther表通过myTable.ID和myOtherTable.parentID进行关联,因此,DataView应该只包含myTable中的行,这些行在myOtherTable中具有相应的子行

不幸的是,我得到了这个错误

语法错误:后面缺少操作数 “独特”运算符


据我所知,SQL很好,所以我想知道在RowFilter的SQL中使用DISTINCT关键字是否有一些限制?有人有什么想法吗?

试着省去不同的部分。在这种情况下,结果应该是相同的或没有。故障排除。

不幸的是,我认为您不能在DataView的筛选器表达式中执行子查询。您只允许在某些已记录的表达式中使用SQL的子集

您可能需要执行子查询,分别从myOtherTable中选择DISTINCT parentID


描述问题和可能的解决方案。

很遗憾,您不能这样做,因为RowFilter属性不支持distinct关键字。以下是可在仅为DataColumn表达式的RowFilter中执行的表达式列表:

DataView有一个ToTable方法,一些重载使用布尔值指定是否只返回不同的行

这里有一种方法:

以下是您将如何使用它:


DataTable newDataTable=myDataView.ToTable true,[列名数组作为字符串]

下面的代码从表/数据视图中提取不同的值/记录,名为prod\u DESP\u TRN,具有fieldCONTAINER\u NO 最后,此代码使用唯一值/记录填充ComboboxCMBCContainerNo

表单级声明:

Dim dsLocal As DataSet 
Dim dvm As DataViewManager
Private Sub FillcomboContainer()

    Try
        Dim dv As DataView = New DataView

        cmbContainerNo.DataSource = Nothing
        dv = dvm.CreateDataView(dsLocal.Tables("PROD_DESP_TRN"))
        dv.Sort = "CONTAINER_NO"

        cmbContainerNo.DataSource = dv.ToTable(True, "CONTAINER_NO")
        cmbContainerNo.DisplayMember = "CONTAINER_NO"

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
    End Try
End Sub

我决定通过创建自己独特的parentID列表来解决这个问题,然后将该列表传递到一个id中。。。谢天谢地得到支持的子句,不同于DISTINCT或GROUP BY。干杯在未来,请尝试添加一些不仅仅是代码,无论它的价值是什么。
DataView dvBindAssignedByDropDown = new DataView();

DataTable dtBindAssignedByDropDown = new DataTable();

dvBindAssignedByDropDown = ds.Tables[0].DefaultView;


string[] strColnames=new string[2];

strColnames[0] = "RedNames";

strColnames[1] = "RedValues";

dtBindAssignedByDropDown = dvBindAssignedByDropDown.ToTable(true, strColnames);

ddlAssignedby.DataTextField = "RedNamesNames";
ddlAssignedby.DataValueField = "RedNames";
ddlAssignedby.DataSource = dtBindAssignedByDropDown;
ddlAssignedby.DataBind();
ddlAssignedby.Items.Insert(0, "Assigned By");
ddlAssignedby.Items[0].Value = "0";