[已结束]CSDN论坛 第11期专家问答——LINQ开发答疑
--------------------编程问答-------------------- 前排混脸熟~~ --------------------编程问答-------------------- 支持督察,学习 --------------------编程问答-------------------- Linq专家不是某CaoMVP吗?--------------------编程问答-------------------- lingq是个好东西 支持学习! --------------------编程问答-------------------- 爆督察菊花。。。 --------------------编程问答-------------------- 顶顶帖子
占个“彩头”的
--------------------编程问答-------------------- 支持督察,学习 --------------------编程问答-------------------- 唐唐 你收徒弟嘛。我零基础,怎么能21天精通LINQ呢,是精通的内种。 --------------------编程问答-------------------- 支持督查 支持督查 不爆张照片??? --------------------编程问答-------------------- 阿萨德发生 --------------------编程问答--------------------
大家好,希望能和大家在这个帖子里共同探讨LINQ相关问题,共同学习 :) --------------------编程问答-------------------- Tim哥nice~ --------------------编程问答-------------------- 我的linq就是和督察、wuyazhe等学的。 --------------------编程问答-------------------- linq 批量删除 DeleteAllOnSubmit性能如何 --------------------编程问答--------------------
linq是个好东西啊
--------------------编程问答--------------------
你确定是lingq,而不是linq? --------------------编程问答-------------------- 我先出个问题:LINQ怎么读? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答--------------------
我个人一般这么读:灵Q~ --------------------编程问答--------------------
我也这么读,谢谢糖糖~~ --------------------编程问答-------------------- 多数读link,灵Q也可以,读得人少 --------------------编程问答--------------------
多数读link,灵Q也可以,读得人少
我以前读line que,是不是很傻。 --------------------编程问答-------------------- --------------------编程问答-------------------- 督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂? --------------------编程问答-------------------- 我也这么读aaa --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法 --------------------编程问答-------------------- 封闭 ==》封装 --------------------编程问答-------------------- 来捧个场 --------------------编程问答-------------------- 围观斑竹解衣
--------------------编程问答-------------------- 路过,来给大猫捧场! --------------------编程问答-------------------- 版主上次帮我解决了个table筛选并构的问题,厉害啊,特来顶贴 --------------------编程问答-------------------- 路过给野猫捧场。求LINQ EF 教程。 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 可以挣积分,这样要6个字 --------------------编程问答-------------------- learning --------------------编程问答-------------------- 过来捧场,LINQ确实很方便很强大。
可惜Java方面好像没有这个功能。 --------------------编程问答-------------------- --------------------编程问答--------------------
我先出个问题:LINQ怎么读?
我个人一般这么读:灵Q~
最后那个Q应该是读K(LINK),微软搞LINQ的也是这么读的。
http://en.wikipedia.org/wiki/Language_Integrated_Query --------------------编程问答-------------------- linq学好是大有前途。 --------------------编程问答-------------------- 正在收集问题,准备难倒专家 --------------------编程问答-------------------- 有教程吗,求教程 --------------------编程问答--------------------
有教程吗,求教程
路过给野猫捧场。求LINQ EF 教程。
教程方面推荐我之前发的LINQ IN ACTION,包含电子书+代码 和一些工具
http://bbs.csdn.net/topics/350155820
--------------------编程问答-------------------- 来捧捧场! --------------------编程问答-------------------- 每天都来给糖糖同学顶一顶。 --------------------编程问答-------------------- 2010年的时候曾经使用过linq,感觉资料很少,就没有怎么深入学习。
现在 ,看见很多人用拉姆达表达式什么的,都不懂
原来还有linq板块的。
随便说一句,我 一般都读成 林抠 --------------------编程问答-------------------- --------------------编程问答-------------------- linq怎么速成 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 还有《程序员》杂志领噢~~ --------------------编程问答-------------------- LINQPAD (有自动提示功能)
win8下无法启动 --------------------编程问答--------------------
LINQPAD (有自动提示功能)
win8下无法启动
WIN8 有没有enable .net3.5?
我在我自己的笔记本上试过(安装win8),启动毫无压力啊 --------------------编程问答-------------------- --------------------编程问答--------------------
lingq是个好东西 支持学习!
你确定是lingq,而不是linq?
linq --------------------编程问答--------------------
LINQPAD (有自动提示功能)
win8下无法启动
这玩意好用么? --------------------编程问答-------------------- 来看看了 --------------------编程问答-------------------- linq跟数据库有什么关系? 好像也是select,delete语句 --------------------编程问答-------------------- learning --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 能提供一个系统的学习LINQ TO SQL的方法吗?
另外我听说LINQ TO SQL微软应该是已经不支持了,推荐我们用entity --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。 --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式 --------------------编程问答-------------------- 写个教程教一下如何实现自己的LinqToXXX,例如Linq To Oracle,Linq To Weibo等等等。 --------------------编程问答-------------------- 看来通信信息要时时看哟,不然都不知道啦、、、呵呵 --------------------编程问答-------------------- 混个脸瘦 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 好贴一定要顶一下。 --------------------编程问答-------------------- 问一个项目开发比较关键的问题,
linq的表达式,可以做到动态生成吗?
比如:动态组装where条件吗?
--------------------编程问答--------------------
问一个项目开发比较关键的问题,
linq的表达式,可以做到动态生成吗?
比如:动态组装where条件吗?
当然可以了 表达式树
http://www.cnblogs.com/FlyEdward/tag/Linq%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%A0%91%20linq%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%A0%91/ --------------------编程问答-------------------- 占位学习!!! --------------------编程问答-------------------- 爆督察菊花。。。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
能提供一个系统的学习LINQ TO SQL的方法吗?
另外我听说LINQ TO SQL微软应该是已经不支持了,推荐我们用entity
同问 --------------------编程问答-------------------- --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么? --------------------编程问答-------------------- --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:
var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:
var query=from u in db.Users--------------------编程问答-------------------- linq 确实强大和好用,由于在工作中使用不多,自己只有私下才会用下,请问版主三个问题
where u.Name.Contains("Tim")
select u;
一、linq to sql 在效率上、速度上跟传统的sql语句(数据汇总类的sql语句,有点复杂度的那种Sql统计语句 ),有没有优势,或者那种更占优势点
二、linq 是否支持对 sql 存储过程的操作
三、linq to sql 对大量数据的分页,能否给点示例 --------------------编程问答-------------------- --------------------编程问答-------------------- 支持C#,支持LZ! --------------------编程问答-------------------- --------------------编程问答-------------------- linq to object ,linq to sql
众所周知,LINQ的使用都是建立在强类型化集合的基础之上,也可以把这些类型统称为Object。(如List<T>中的T)那如此一来LINQ2SQL也便脱离不了linq to object的影子了。而现在都划分出linq to object ,linq to sql,请问这2点的明确边界线在哪里?究竟是如何划分的?我们能不能说LINQ2SQL就是linq to object?还有LINQ2SQL在4.0中就不被支持了。取而代之的是EF这一套。那么能不能理解EF就是LINQ2SQL的升级版(EF是支持多类型数据库,相比SQL是进步了),还是有其他的区别?还有EF目前广泛使用到了仓储,注入式。这些机制的优势在哪里?为什么要使用这些?问题比较多啊。好不容易遇到专家。。。希望专家见谅啊。。我们都盼着你很长时间了。呵呵~ --------------------编程问答-------------------- 1,linq to object ,linq to sql
众所周知,LINQ的使用都是建立在强类型化集合的基础之上,也可以把这些类型统称为Object。(如List<T>中的T)那如此一来LINQ2SQL也便脱离不了linq to object的影子了。而现在都划分出linq to object ,linq to sql,请问这2点的明确边界线在哪里?究竟是如何划分的?我们能不能说LINQ2SQL就是linq to object?
2,还有LINQ2SQL在4.0中就不被扩展了。取而代之的是EF这一套。那么能不能理解EF就是LINQ2SQL的升级版(EF是支持多类型数据库,相比SQL是进步了),还是有其他的区别?还有EF目前广泛使用到了仓储,注入式。这些机制的优势在哪里?为什么要使用这些?
问题比较多啊。好不容易遇到专家。。。希望专家见谅啊。。我们都盼着你很长时间了。呵呵~ --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗? --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗?
在CLR看来,二者没有什么区别。 在数据库看来,二者也没有什么区别,最终都得到相同的查询结果:
select * from Users where name like '%Tim%'--------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗?
Linq表达式是语法糖,C#编译器会转化成等效的Linq操作符,而且Linq表达式只能实现Linq所有功能的一个子集。Linq表达式在VB和C#中受到支持的程度还不一致。比如Distinct,在VB中支持,而C#就只能用Linq操作符了。作为初学者,要想得要领,先应该学会Linq操作符,再学习Linq表达式和Linq操作符的对应关系,这样使用Linq表达式才能运用自如。 --------------------编程问答--------------------
LinqToXXX和LinqToObject的不同是,前者查询的过程是由其Provider实现的,比如Linq To SQL,它是直接把你的where orderby take skip等等全部翻译成sql,在数据库上查询的。试想如果直接使用LinqToObject,后果就是如果数据库中有10万条数据,你只要name=abc的第一条数据,那也得傻呵呵地把所有的数据都搬到内存中,然后才能过滤出那一条。 --------------------编程问答-------------------- 还有EF目前广泛使用到了仓储,注入式。这些机制的优势在哪里?为什么要使用这些?
你用的名词挺多,但是这些和EF没有任何关系。如果你能在听到一个感觉很靓的名词的时候花5分钟google下,就更好了。 --------------------编程问答--------------------
1,linq to object ,linq to sql
众所周知,LINQ的使用都是建立在强类型化集合的基础之上,也可以把这些类型统称为Object。(如List<T>中的T)那如此一来LINQ2SQL也便脱离不了linq to object的影子了。而现在都划分出linq to object ,linq to sql,请问这2点的明确边界线在哪里?究竟是如何划分的?我们能不能说LINQ2SQL就是linq to object?
2,还有LINQ2SQL在4.0中就不被扩展了。取而代之的是EF这一套。那么能不能理解EF就是LINQ2SQL的升级版(EF是支持多类型数据库,相比SQL是进步了),还是有其他的区别?还有EF目前广泛使用到了仓储,注入式。这些机制的优势在哪里?为什么要使用这些?
问题比较多啊。好不容易遇到专家。。。希望专家见谅啊。。我们都盼着你很长时间了。呵呵~
1. 同意89楼老曹的意见
linq to object是直接在内存中查询
而LINQ TO SQL 有一个特性,就是延迟查询,简单点理解就是:当你要去查询数据库中某表的数据时,程序执行到查询的代码行,但是并没有去立即查询,而是当你需要使用这些数据时,LINQ才会去查询数据库,返回IQueryable<T>
2.就像你所说的,LINQ2SQL只支持SQL SERVER,EF支持多数据库,但在支持SQL SERVER没有LINQ2SQL支持的更全面。 各有千秋吧。 有些操作符在LINQ2SQL中,可以直接翻译成SQL语句,而在EF中,就不支持。详情可参考:http://msdn.microsoft.com/en-us/library/bb738550.aspx
仓储和注入,这些确实和EF没有什么关系,但你可以在EF中实现它们。 比如,在泛型基类中封装了DbContext对象,这样做可以完成一般性的事务处理需求 --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗?
在CLR看来,二者没有什么区别。 在数据库看来,二者也没有什么区别,最终都得到相同的查询结果:
select * from Users where name like '%Tim%'
这样的话没什么区别,那上面的:一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
为什么要这样分呢? --------------------编程问答-------------------- 顶之 --------------------编程问答--------------------
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗?
在CLR看来,二者没有什么区别。 在数据库看来,二者也没有什么区别,最终都得到相同的查询结果:
select * from Users where name like '%Tim%'
这样的话没什么区别,那上面的:一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
为什么要这样分呢?
这就回到了25楼的问题了啊: 为了提高linq的可读性 --------------------编程问答-------------------- 请问哈,List<T> T表示引用类型,比如是一个类,Linq 如何去除此集合的重复数据 --------------------编程问答--------------------
请问哈,List<T> T表示引用类型,比如是一个类,Linq 如何去除此集合的重复数据
重新实现IEqualityComparer<T>接口,使用Enumerable.Distinct<TSource> Method (IEnumerable<TSource>, IEqualityComparer<TSource>)来去重复:
public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source,
IEqualityComparer<TSource> comparer
)
举例,比如目前有这样一个Product[] 需要去重复:
public class Product
{
public string Name { get; set; }
public int Code { get; set; }
}
Product[] products = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 },
new Product { Name = "apple", Code = 9 },
new Product { Name = "lemon", Code = 12 } };
首先要自定义一个class ProductComparer : IEqualityComparer<Product>
// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(Product x, Product y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.Code == y.Code && x.Name == y.Name;
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public int GetHashCode(Product product)
{
//Check whether the object is null
if (Object.ReferenceEquals(product, null)) return 0;
//Get hash code for the Name field if it is not null.
int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();
//Get hash code for the Code field.
int hashProductCode = product.Code.GetHashCode();
//Calculate the hash code for the product.
return hashProductName ^ hashProductCode;
}
}
然后进行去重复操作:
IEnumerable<Product> noduplicates =--------------------编程问答--------------------
products.Distinct(new ProductComparer());
foreach (var product in noduplicates)
Console.WriteLine(product.Name + " " + product.Code);
/*
This code produces the following output:
apple 9
orange 4
lemon 12
*/
督查,如何提高linq的可读性?我看几个月前自己写的linq,虽然简洁美观,但需要重新整理逻辑来推断意图,不如不用linq的代码可读性强。有什么办法能让代码又优美,又易读懂?
个人做法,简单的查询用lamda表达式
复杂逻辑的查询,用标准表达式
多处用到的,封闭成扩展方法
请教下,能不能这3种情况,给个简单的例子说明,加深印象。
一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
新手提问:标准表达式指什么?
比如:
lamda表达式:var query=db.Users.Where(u=>u.Name.Contains("Tim"));
标准表达式:var query=from u in db.Users
where u.Name.Contains("Tim")
select u;
那这两个表达式都是获取用户名中包含有Tim的,请问这两者有什么区别吗?
在CLR看来,二者没有什么区别。 在数据库看来,二者也没有什么区别,最终都得到相同的查询结果:
select * from Users where name like '%Tim%'
这样的话没什么区别,那上面的:一般情况下,单表操作,比如WHERE,GROUPBY,ORDERBY 等 操作,用lamda表达式
多表的JOIN查询,如LEFT OUT JOIN,INNER JOIN等,用标准表达式
为什么要这样分呢?
很多问题自己是能够想明白的。或者说,你即便在询问别人之前,也应该自己想一想。当发现别人和自己答案不同的时候,如果别人的答案更好,你会收获思考的方法,并且进步。当你发现别人的答案不如你的,或者是你考虑过,但是否决的,你又会以质疑的眼光重新审视别人的答案,并且去伪存真。记住,这个世界上所有的问题的答案都是人想出来的。所以不要轻易放弃思考的权利。 --------------------编程问答-------------------- Good Morning --------------------编程问答--------------------
请问哈,List<T> T表示引用类型,比如是一个类,Linq 如何去除此集合的重复数据
重新实现IEqualityComparer<T>接口,使用Enumerable.Distinct<TSource> Method (IEnumerable<TSource>, IEqualityComparer<TSource>)来去重复:
public static IEnumerable<TSource> Distinct<TSource>(
this IEnumerable<TSource> source,
IEqualityComparer<TSource> comparer
)
举例,比如目前有这样一个Product[] 需要去重复:
public class Product
{
public string Name { get; set; }
public int Code { get; set; }
}
Product[] products = { new Product { Name = "apple", Code = 9 },
new Product { Name = "orange", Code = 4 },
new Product { Name = "apple", Code = 9 },
new Product { Name = "lemon", Code = 12 } };
首先要自定义一个class ProductComparer : IEqualityComparer<Product>
// Custom comparer for the Product class
class ProductComparer : IEqualityComparer<Product>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(Product x, Product y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.Code == y.Code && x.Name == y.Name;
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public int GetHashCode(Product product)
{
//Check whether the object is null
if (Object.ReferenceEquals(product, null)) return 0;
//Get hash code for the Name field if it is not null.
int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();
//Get hash code for the Code field.
int hashProductCode = product.Code.GetHashCode();
//Calculate the hash code for the product.
return hashProductName ^ hashProductCode;
}
}
然后进行去重复操作:
IEnumerable<Product> noduplicates =
products.Distinct(new ProductComparer());
foreach (var product in noduplicates)
Console.WriteLine(product.Name + " " + product.Code);
/*
This code produces the following output:
apple 9
orange 4
lemon 12
*/
补充:.NET技术 , LINQ