LINQ,我在网站上提出了很多问题.我提出的问题范围广泛而且多种多样,往往背后没有太多背景.因此,为了巩固我在Linq上获得的知识,我发布了这个问题,以便在我继续学习LINQ时使用其他信息来维护和更新它.
我也希望它能够成为想要了解LINQ的其他人的有用资源.
来自MSDN:
LINQ项目是.NET Framework的一组扩展的代号,包含语言集成的查询,设置和转换操作.它使用本机语言语法扩展C#和Visual Basic,并提供类库以利用这些功能.
这意味着LINQ提供了一种使用通用语法查询各种数据源的标准方法.
目前,Microsoft提供了一些不同的LINQ提供程序:
还有很多其他的,其中许多列在这里.
Chook提供了一种输出CSV文件的方法
Jeff显示了如何从数组中删除重复项
Bob 从数据表中获取一个不同的有序列表
Marxidad显示了如何对数组进行排序
Dana获得了使用Linq实现快速排序的帮助
GateKiller的问题链接摘要如下:
Scott Guthrie 在他的博客上为Linq提供了一个介绍MSDN
上LINQ的概述
ChrisAnnODell建议退房:
就在我与LINQ to SQL交朋友时,似乎MS正在从它下面拉出地毯.
从我的一点点研究来看,EF对简单的工作来说太过分了.但是在这个公告之后是否有继续使用LINQ to SQL的意义?
超越LINQ to SQL的未来,这不仅仅是发送一个糟糕的信号吗?鉴于MS在墙上投掷比特的速度,早期使用任何新比特是否合理?(而且这很好,LINQ to SQL几乎不早!).
对于我的LINQ to SQL工作,我想我会去SubSonic!
更新:一些新意见:
http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx
我希望社区对我对Linq to Sql和其他ORM映射器的一些看法有所了解.
我喜欢Linq to Sql以及在本机开发语言中表达数据访问逻辑(或一般CRUD操作)的想法,而不是必须处理C#和SQL之间的"阻抗不匹配".例如,要返回与业务层的EventDataSource兼容的Event实例列表,我们使用:
return db.Events.Select(c => new EventData() { EventID = c.EventID, Title = c.Title })
Run Code Online (Sandbox Code Playgroud)
如果我使用旧的SQL-to-C#构造实现它,我必须创建一个Command类,添加EventID参数(使用字符串来描述"@EventID"参数),将SQL查询字符串添加到命令类,执行命令,然后使用(cast-type)nwReader ["FieldName"]拉取每个返回的字段值,并将其分配给我创建的EventData类实例的成员(yuck).
所以,这就是人们喜欢Linq/SubSonic /等的原因.并且我同意.
然而,从更大的角度来看,我看到了一些错误的东西.我的感觉是,微软也看到了一些错误,这就是为什么他们将Linq杀死为SQL并试图将人们转移到Linq to Entities.只是,我认为微软正在加倍打赌.
那么,有什么不对?
问题是有架构的宇航员,特别是在微软,他们看着Linq到Sql,并意识到它不是一个真正的数据管理工具:在C#中还有许多你不能轻易做到的事情,他们的目标是修复它. 你看到这体现在Linq to Entities背后的野心,关于Linq 的革命本质的博客文章甚至是LinqPad的挑战.
而这个问题是在于,它假定SQL的问题.也就是说,为了减轻轻微的不适(SQL和C#之间的阻抗不匹配),当创可贴(Linq to SQL或类似的东西)做得很好时,微软提出了相当于太空服(完全隔离).
据我所知,开发人员非常聪明,可以掌握关系模型,然后在开发工作中智能地应用它.事实上,我会更进一步说Linq to SQL,SubSonic等已经过于复杂:学习曲线与掌握SQL本身并没有太大的不同.因为,在可预见的未来,开发人员必须掌握SQL和关系模型,我们现在面临学习两种查询/ CRUD语言的问题.更糟糕的是,Linq通常很难测试(你没有查询窗口),从我们正在做的实际工作中删除了一层(它生成了SQL),并且对于像SQL结构这样的SQL结构具有非常笨拙的支持(最好)日期处理(例如DateDiff),"拥有"甚至"分组依据".
有什么选择?就个人而言,我不需要像Linq to Entities那样的数据访问的不同模型.我更喜欢在Visual Studio中弹出一个窗口,输入并验证我的SQL,然后按一个按钮生成或补充一个C#类来封装调用.既然你已经知道了SQL,你不想只输入这样的东西:
Select EventID, Title From Events Where Location=@Location
Run Code Online (Sandbox Code Playgroud)
并最终得到一个EventData类,A)包含EventID和Title字段作为属性,B)有一个工厂方法,它将一个'Location'字符串作为参数,并生成一个List <EventData>?你必须仔细考虑对象模型(上面的例子显然没有解决这个问题),但仍然使用SQL同时消除阻抗不匹配的基本方法对我很有吸引力.
问题是:我错了吗?Microsoft是否应该重写SQL基础结构,以便您不必再学习SQL /关系数据管理? 他们可以用这种方式重写SQL基础结构吗?或者你认为在SQL之上的一个非常薄的层来消除设置参数和访问数据字段的痛苦是足够的吗?
更新我想推广到顶部的两个链接,因为我认为它们捕获了我所追求的重要方面.首先,CodeMonkey指出了一篇题为"计算机科学的越南" …
我最近有两次电话采访.
在两次采访中,我被问到是定义Lambda表达式的最后一个问题.
我声称Lambda表达式是一个未命名的方法来代替委托.但不知何故,这还不够.
我发现在电话采访中很难解释这一点.
有谁知道更好吗?
我通常用这个词entity来表示企业数据对象和在我的脑海中,linq to entities并且linq to objects是相同的.这不正确吗?
任何人都可以解释什么是LINQ,Lambda,匿名方法,代表意味着什么?
这3个如何彼此不同?
另一个可替换吗?
当我使用谷歌搜索时,我没有得到任何具体的答案
我有一个包含供应商名称的清单.说
SuppId Supplier Name
----------------------------------
1 Aardema & Whitelaw
2 Aafedt Forde Gray
3 Whitelaw & Sears-Ewald
Run Code Online (Sandbox Code Playgroud)
使用以下LINQ查询
supplierListQuery = supplierListQuery.Where(x => x.SupplierName.Contains(SearchKey));
Run Code Online (Sandbox Code Playgroud)
我可以在以下条件下正确返回记录,
1)如果我使用搜索字符串作为"Whitelaw&Sears-Ewald",它将返回第3条记录.
2)如果我使用"Whitelaw"或" Sears-Ewald",它将返回第3条记录.
但是,如果我将搜索字符串作为"Whitelaw Sears-Ewald",我怎么能返回第3条记录.它总是返回0条记录.
我可以使用ALL来获得此结果,但我不知道如何使用它来满足这一特殊需求.
我是Linq的新手请指导我一些基本的事情.
在阅读Linq的一些文章.一些authers从Linq查询中填充var中的数据,一些填充自定义类型对象的列表,一些填充IEnumerable中的数据,一些填充IQuryable中的数据.我无法得到这些4中的不同之处以及应该在哪种情况下使用哪一个.
我想使用Linq to SQL.我该怎么用?
linq linq-to-objects linq-to-entities linq-to-xml linq-to-sql