【问题标题】:Linq to DataTable not producing Distinct valuesLinq to DataTable 不产生不同的值
【发布时间】:2011-04-27 09:53:51
【问题描述】:

我有一个使用 UNION Select 语句从 FoxPro 表动态生成的数据表。例如

SELECT * FROM x UNION SELECT * FROM y UNION SELECT * FROM Z ORDER By v_alue1

这将生成一个包含大约 100 行的数据表,每行包含许多字段,其中一个是 c_olor。从这个数据表中,我想选择不同的颜色,然后在下拉列表中输出。

我有一个公共类 Color,它只有一个属性,然后我可以将其用作下拉列表的 DataTextField 和 DataValueField

Public Class Color
    Private _c_olor As String
    Public Property c_olor() As String
        Get
            Return _c_olor
        End Get
        Set(ByVal value As String)
            _c_olor = value
        End Set
    End Property
End Class

我的 linq 语句是

Dim colorDs = (From o In dt.Rows Select Color = New With {.c_olor = o("c_olor").ToString().Trim(Nothing).ToLower()}).Distinct().ToList()

但是,这永远不会产生不同的颜色。

我已经搜索并搜索了我正在寻找的东西,这似乎是产生一组独特结果的方法之一,但这种方法和其他方法都不起作用。

我以这种方式获取颜色的原因是,我需要从同一个 UNION SELECT 数据源中获取各种其他不同的值,因此只需进行一次 DB 调用,缓存结果,然后使用这个缓存的数据源来检索我所有独特的价值观。

【问题讨论】:

    标签: asp.net vb.net linq linq-to-dataset


    【解决方案1】:

    我不是 VB 专家,但您似乎是先创建颜色,然后尝试找到不同的颜色

    在这种情况下,您需要在颜色类上实现 Equals

    Dim colorDs = (From o In dt.Rows Select Color = New With {.c_olor = o("c_olor").ToString().Trim(Nothing).ToLower()}).Distinct().ToList( )

    或者,您可以先找到不同的值,然后创建颜色实例

    Dim colorDs = (From o In dt.Rows Select o("c_olor").ToString().Trim(Nothing).ToLower()).Distinct().ToList()
    

    应该产生唯一字符串颜色的列表

    【讨论】:

    • 谢谢。我只是需要这种额外的方法来解决这个问题。我从数据表中找到了不同的值,然后从该查询中创建了 Color 实例。
    猜你喜欢
    • 2010-12-22
    • 2013-02-17
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多