var courseList0 =from kecheng in dt.AsEnumerable()
select new
{
name = kecheng["ItemName"].ToString(),
id = kecheng["DictoryItemID"].ToString(),
order = kecheng["OrderVal"].ToString()
};
请问我只想 根据DictoryItemID 去重 应该怎么写?
var courseList = courseList0.Distinct(); 是根据所有字段全部去重吗
这个问题是无解的。
你只想根据其中一个字段去除重复,你就必须告诉LINQ,另外两个字段咋办?
是想取第一个值呢,还是最后一个,是取最大值呢,还是了最小值,或者是取合计值SUM
这个和SQL中的GROUP BY是一个道理的。
怎么会呢 那是筛选条件啊 和另外的咋办有啥关系 他和group by不一样的
@keeppuching:
我都不知道该咋回答你了,
Field1 Field2 Field3
A 1 1
A 2 3
A 2 2
B 2 1
B 1 2
你想查出来有Field1, Field2, Field3,而且Field1只有一行A,一行B这个效果是吧?
请问SQL要把Field2, Field3拿哪一行数据给你?你当SQL 服务器是天机老人还是断命神算?
@爱编程的大叔: 哥你回答别人的问题好犀利哦!
@魔女小溪: 有礼貌点应该叫叔...
@爱编程的大叔: 你多呀!(⊙o⊙)…,难不成跟我老爸一样差不多大吗?有40几了吗?O(∩_∩)O哈哈~
IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
可以接收一个IEqualityComparer的,定义一个比较类,在重载Equals方法中,只根据DictoryItemID进行比较就好了
值类型,根据所有字段的值来比较大小,引用类型,是根据引用来比较大小,跟引用的对象的的状态无关。你可以实现 IEquatable ,提供自定义的比较方式:
http://msdn.microsoft.com/zh-cn/library/bb348436(v=vs.110).aspx
楼上都正解,重载Equal最简单。
var courseList0 =from kecheng in dt.AsEnumerable()
select new
{
name = kecheng["ItemName"].ToString(),
id = kecheng["DictoryItemID"].ToString(),
order = kecheng["OrderVal"].ToString()
};
在select new{}里面判断,如果想等就过滤呗