linq Distinct 去掉重复问题

DMPX 2011-08-26 05:23:16
var query = (from j in db.Job
join c in db.Company on j.UserId equals c.UserId
into cj
from c in cj.DefaultIfEmpty()
select new
{
UserId = c.UserId,
CompanyName = c.CompanyName,
Jobs = c.Jobs
}).Distinct().AsEnumerable().Select(b => new Company() { UserId = b.UserId, CompanyName = b.CompanyName, Jobs = b.Jobs.ToList() });

提示:无法将“Distinct”操作应用于所指定参数的集合 ResultType。
参数名: argument
...全文
493 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
DMPX 2011-08-26
  • 打赏
  • 举报
回复
http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html
q107770540 2011-08-26
  • 打赏
  • 举报
回复

public class DataRowComparer : IEqualityComparer<Company>
{
public bool Equals(Company t1, Company t2)
{
return (t1.UserId == t2.UserId
&& t1.CompanyName == t2.CompanyName
&& t1.Jobs==t2.Jobs);
}
public int GetHashCode(Company t)
{
return t.ToString().GetHashCode();
}
}

var query = (from j in db.Job
join c in db.Company on j.UserId equals c.UserId
into cj
from c in cj.DefaultIfEmpty()
select new Company
{
UserId = b.UserId,
CompanyName = b.CompanyName,
Jobs = b.Jobs.ToList()
}).Distinct(new DataRowComparer());
DMPX 2011-08-26
  • 打赏
  • 举报
回复
使用GroupBy是否能达到效果?
vrhero 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dmpx 的回复:]
没有 Jobs = c.Jobs 是可以的
[/Quote]
那是当然...因为其他的都是简单类型,是可以自动生成比较语句的...而你这个Jobs显而易见是个引用类型,你不指定IEqualityComparer<T>接口鬼才知道怎么比较...
DMPX 2011-08-26
  • 打赏
  • 举报
回复
没有 Jobs = c.Jobs 是可以的
vrhero 2011-08-26
  • 打赏
  • 举报
回复
因为你new出来的匿名类型无法比较,所以不能支持Distinct...

改成命名类型并为你的自定义Distinct方法实现IEqualityComparer<T>接口参数,或者在select之前就Distinct...
Cloud_drift 2011-08-26
  • 打赏
  • 举报
回复
把两个查询分开写试试。
让 distinct 作用在 query 上。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧