是否有方法在LINQ查询语法中使用Distinct

本文关键字:Distinct 语法 查询 有方法 LINQ 是否 | 更新日期: 2023-09-27 17:51:26

有没有办法重写:

var tbl = ds.TABLES;
var q = from c in tbl
        select c.TABLE_TYPE;
string s = "";
foreach (var item in q.Distinct())
{
    s += "[" + item + "]";
}        
MessageBox.Show(s);

使Distinct()调用在LINQ查询中?

是否有方法在LINQ查询语法中使用Distinct

语言集成查询语法中没有Distinct()方法语法。你能做的最接近的是移动当前调用:

var q = (from c in tbl
         select c.TABLE_TYPE).Distinct();

LINQ中的Distinct扩展方法没有等价的查询语法

(from c in tbl select c.TABLE_TYPE).Distinct();

如果您在select之后放置区别符,

您可以捕获HashSet并在select前放置where子句:

var hs = new HashSet<char>();
from c in "abcabcd"
where hs.Add(c)
select c;

在寻找LINQ的Distinct-function时发现这个问题并意识到它不存在,我的解决方法是使用GroupBy()。一个明显的问题是,distinct-set不包含所有的数据(假设您有三个字段,但只希望区分两个字段,而遗漏了最后一个字段的值,但是,t-sql中的distinct工作方式相同)。

LINQ-code(因此转储):

void Main()
{
    var gt = new GenerateThings();
    var dlist = gt.list();
    dlist.Dump();
    dlist.GroupBy(x => new {x.id, x.cat}).Dump();
}
public class model
{
    public int id {get;set;}
    public int cat {get;set;}
    public int type {get;set;}
}
public class GenerateThings
{
    public List<model>list()
    {
        var dlist = new List<model>();
        dlist.Add(createNew(1, 1, 1));
        dlist.Add(createNew(1, 1, 1));
        dlist.Add(createNew(1, 2, 1));
        dlist.Add(createNew(1, 2, 1));
        dlist.Add(createNew(1, 1, 2));
        dlist.Add(createNew(1, 1, 2));
        dlist.Add(createNew(1, 1, 2));
        return dlist;
    }
    private model createNew(int id, int cat, int type){
        return new model{
            id = id,
            cat = cat,
            type = type
        };
    }
}

LINQ-dump result