首页 新闻 会员 周边

linq 去重问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-05-22 09:41

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(); 是根据所有字段全部去重吗

keeppuching的主页 keeppuching | 初学一级 | 园豆:6
提问于:2014-01-21 10:23
< >
分享
最佳答案
0

这个问题是无解的。

你只想根据其中一个字段去除重复,你就必须告诉LINQ,另外两个字段咋办?

是想取第一个值呢,还是最后一个,是取最大值呢,还是了最小值,或者是取合计值SUM

这个和SQL中的GROUP BY是一个道理的。

收获园豆:3
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-01-21 12:08

怎么会呢 那是筛选条件啊 和另外的咋办有啥关系  他和group by不一样的

 

keeppuching | 园豆:6 (初学一级) | 2014-01-22 13:27

@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 服务器是天机老人还是断命神算?

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-01-22 23:35

@爱编程的大叔: 哥你回答别人的问题好犀利哦!

福气满满好运连连 | 园豆:60 (初学一级) | 2014-09-03 10:30

@魔女小溪: 有礼貌点应该叫叔...

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-09-03 10:36

@爱编程的大叔: 你多呀!(⊙o⊙)…,难不成跟我老爸一样差不多大吗?有40几了吗?O(∩_∩)O哈哈~

福气满满好运连连 | 园豆:60 (初学一级) | 2014-09-03 10:38
其他回答(4)
0

IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)

可以接收一个IEqualityComparer的,定义一个比较类,在重载Equals方法中,只根据DictoryItemID进行比较就好了

收获园豆:1
平常心队长 | 园豆:1113 (小虾三级) | 2014-01-21 10:27
0

值类型,根据所有字段的值来比较大小,引用类型,是根据引用来比较大小,跟引用的对象的的状态无关。你可以实现 IEquatable ,提供自定义的比较方式:

http://msdn.microsoft.com/zh-cn/library/bb348436(v=vs.110).aspx

Launcher | 园豆:45045 (高人七级) | 2014-01-21 10:30
0

楼上都正解,重载Equal最简单。

幻天芒 | 园豆:37175 (高人七级) | 2014-01-21 10:42
0

var courseList0 =from kecheng in dt.AsEnumerable()
select new
{
name = kecheng["ItemName"].ToString(),
id = kecheng["DictoryItemID"].ToString(),
order = kecheng["OrderVal"].ToString()
};

在select new{}里面判断,如果想等就过滤呗

收获园豆:1
雾静 | 园豆:561 (小虾三级) | 2014-02-07 14:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册