уточните вопрос - выхотите получить выборку по конкретному id?
если да, то надо не
Distinct()
использовать, а
Where(d => (d.id == targetId))
если вы примените
Distinct()
, то даже при наличии повторяющихся id, но с различными данными, то вы получите
ровно всю исходную коллекцию
ну и как возможный вариант для повторяющихся id, если вы хотите получить только список id, то
код и выхлоп под спойлеромusing System;
using System.Collections.Generic;
using System.Linq;
public class dt
{
public int id;
public int val;
}
namespace distinct_or_not_distinct
{
public static class Program
{
public static void Main()
{
var listdata = new List<dt>();
listdata.Add(new dt() { id = 1, val = 11 });
listdata.Add(new dt() { id = 1, val = 12 });
listdata.Add(new dt() { id = 2, val = 21 });
listdata.Add(new dt() { id = 2, val = 22 });
listdata.Add(new dt() { id = 3, val = 31 });
"distinct dt".print();
listdata.Distinct().ToList().print();
newLine();
"distinct id".print();
(from d in listdata select d.id).Distinct().ToList().print();
newLine();
var targetId = 2;
$"target id {targetId}".print();
listdata.Where(d => (d.id == targetId)).ToList().print();
newLine();
}
public static void print(this List<dt> l) { foreach (var d in l) d.print(); }
public static void print(this dt d) => Console.WriteLine($"\tid:{d.id} val:{d.val}");
public static void print(this List<int> l) { foreach (var i in l) i.print(); }
public static void print(this int i) => Console.WriteLine('\t' + i.ToString());
public static void print(this string s) => Console.WriteLine(s);
public static void newLine() => Console.WriteLine();
}
}