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