有没有办法改写:
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查询中?
答案 0 :(得分:54)
语言集成查询语法中没有Distinct()
方法语法。你可以做的最接近的是移动当前的电话:
var q = (from c in tbl
select c.TABLE_TYPE).Distinct();
答案 1 :(得分:50)
LINQ中的Distinct
扩展方法没有等效的查询语法。
有关原因的更多信息,请参阅http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx。
答案 2 :(得分:11)
(from c in tbl select c.TABLE_TYPE).Distinct();
答案 3 :(得分:1)
如果在select之后放置distinct,则VB具有此功能。
答案 4 :(得分:0)
您可以捕获HashSet并在select之前放置where子句:
var hs = new HashSet<char>();
from c in "abcabcd"
where hs.Add(c)
select c;
答案 5 :(得分:0)
在发现此问题并意识到不存在此问题时,在为LINQ搜索独特功能时,我的解决方法是使用GroupBy()。 明显的问题是,不重复集不包含所有数据(例如,您有三个字段,但只想区分两个字段,而最后一个字段的值丢失了,但是再一次,在t-sql中是DISTINCT的工作方式相同。
LINQ代码(因此转储):
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
};
}
}