是否有方法在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查询中?
语言集成查询语法中没有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