Here I have created sample that will help you out.
HTML
<div>
    <asp:GridView ID="gvDistinctData" runat="server" AutoGenerateColumns="true" />
</div>
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("productid");
        dt.Columns.Add("productname");
        dt.Rows.Add("1", "Ac");
        dt.Rows.Add("2", "Tv");
        dt.Rows.Add("2", "Tv");
        dt.Rows.Add("1", "Ac");
        var distinctValues = dt.AsEnumerable()
                    .Select(row => new
                    {
                        productid = row.Field<string>("productid"),
                        productname = row.Field<string>("productname")
                    })
                    .Distinct();
        gvDistinctData.DataSource = distinctValues;
        gvDistinctData.DataBind();
    }
}
VB
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.Add("productid")
        dt.Columns.Add("productname")
        dt.Rows.Add("1", "Ac")
        dt.Rows.Add("2", "Tv")
        dt.Rows.Add("2", "Tv")
        dt.Rows.Add("1", "Ac")
        Dim distinctValues = dt.AsEnumerable().[Select](Function(row) New With { _
         Key .productid = row.Field(Of String)("productid"), _
         Key .productname = row.Field(Of String)("productname") _
        }).Distinct()
        gvDistinctData.DataSource = distinctValues
        gvDistinctData.DataBind()
    End If
End Sub
Screenshot

for more info please refer below link
http://stackoverflow.com/questions/9299223/get-distinct-items-from-datatable-using-linq