當VS2005 遇上 LINQ

C#——Linq详解 Action、Func详解并与lambda表达式结合使用、揭秘linq方法的背后、linq常用的扩展方法 阅读详情
 
當VS2005 遇上 LINQ
 
文/黃忠成
 
 在【極意之道-次世代 .NET Framework 3.5 資料庫開發聖典】(好長的書名,我該取個匿稱嗎?哈)一書第三章中,有下面這段敘述:
任何支援.NET Framework 2.0的程式語言都能夠叫用LINQ所提供的查詢函式,也就是說能使用C# 2.0來呼叫LINQ Framework
書中列出一小段程式碼,證明事實上只要是C# 2.0,就能夠使用LINQ所提供的查詢函式,前提是電腦中必須安裝.NET Framework 3.5。
 那好,什麼時候我們會需要這種寫法呢?想像一下,你可以利用LINQ查詢函式來做什麼?你可以將兩個陣列Join起來、排序、Group、查詢,你也可以將兩個XML檔案Join起來,甚至可以將兩個DataTable Join起來,哦!這段敘述是否挑到你最敏感的那條神經了呢?
  不過,說歸說,做歸做,如果在.NET Framework 2.0中叫用LINQ,能得到什麼好處呢?很明顯的,你原本的專案不需要做大幅度的升級,你不需要裝Visual Studio 2008,你只需安裝.NET Framework 3.5,然後加入對System.Core的參考,就能得到LINQ查詢函式的火力,再加入System.Xml.Linq的參考,就能得到LINQ To XML查詢函式,加入System.Data.DataSetExtensions的參考,就能將兩個DataTable Join起來。
 但,有了這些好處,事情真的會比較簡單嗎?那得視情況而定,在沒有LINQ Expression支援下使用LINQ查詢函式,有時會將事情變的複雜,換句話說,程式碼可能變多了。不過,大部份情況下,我相信使用LINQ查詢函式會把程式碼縮短,畢竟,查詢演算法是內建在LINQ中了。
static void DemoLinq()
{
            string[] list = new string[] { "code6421", "tom", "david", "cathy" };
            IEnumerable<string> result = Enumerable.Where<string>(list,
                             delegate(string item)
                             {
                                 return item == "tom";
                             });
            Console.WriteLine(Enumerable.FirstOrDefault(result));
}
上面這段程式碼可以運行於Visual Studio 2005、Visual Studio 2008,如你使用Visual Studio 2005,請先安裝.NET Framework 3.5,然後於專案中添加對System.Core的參考(此DLL位於Program Files/ Reference Assemblies/Microsoft/Framework/3.5),完成後編譯程式,你便達到於C#,Visual Studio 2005中使用LINQ的目的。
 
Join 2 DataTables
 
 我想有許多寫Windows Form程式的人,都曾經對於如何Join兩個DataTable困擾過,事實上這很簡單,只要建另一個DataTable,一個蘿蔔一個坑的填即可。
 不過有了LINQ To DataSet,一切都變的簡單且直覺,但!缺少了LINQ Expression的C# 2.0,只憑LINQ 查詢函式來做,可以把這件事變簡單嗎?
using System.Data.SqlClient;
........
static IEnumerable<JoinData> JoinTables()
{
            using (SqlConnection conn = new SqlConnection(
"Data Source=JEFFRAY;Initial Catalog=Northwind;Integrated Security=True"))
{
                SqlDataAdapter adapter1 = new SqlDataAdapter("SELECT * FROM Customers", conn);
                SqlDataAdapter adapter2 = new SqlDataAdapter("SELECT * FROM Orders", conn);
                DataTable dt1 = new DataTable("Customers");
                DataTable dt2 = new DataTable("Orders");
                adapter1.Fill(dt1);
                adapter2.Fill(dt2);
 
                return Enumerable.Join<DataRow,DataRow,string,JoinData>(
                         DataTableExtensions.AsEnumerable(dt2),
                         DataTableExtensions.AsEnumerable(dt1),
                            delegate(DataRow s1)
                            {
                               return s1.IsNull("CustomerID") ?
                                      null : (string)s1["CustomerID"];
                            },
                            delegate(DataRow s2)
                            {
                               return s2.IsNull("CustomerID") ? null :
                                   (string)s2["CustomerID"];
                            },
                            delegate(DataRow s1,DataRow s2)
                            {
                                JoinData result = new JoinData();
                                  result.OrderID = s1.IsNull("OrderID") ? -1 :
                                         (int)s1["OrderID"];
                                result.CompanyName = s2.IsNull("CompanyName") ?
                                  string.Empty : (string)s2["CompanyName"];
                                   return result;
                             });
             }
 }
 
.........
public class JoinData
{
        private int _orderID;
        private string _companyName;
        public int OrderID
        {
            get
            {
                return _orderID;
            }
            set
            {
                _orderID = value;
            }
        }
 
        public string CompanyName
        {
            get
            {
                return _companyName;
            }
            set
            {
                _companyName = value;
            }
        }
}
這個程式需要引用System.Data.DataSetExtnesions.DLL,她與System.Core位於同一目錄下,JoinTables的函式傳回值頃印結果如下:
10779,Morgenstern Gesundkost
10780,LILA-Supermercado
10781,Wartian Herkku
10782,Cactus Comidas para llevar
10783,Hanari Carnes
10784,Magazzini Alimentari Riuniti
10785,GROSELLA-Restaurante
10786,Queen Cozinha
10787,La maison d'Asie
10788,QUICK-Stop
10789,Folies gourmandes
10790,Gourmet Lanchonetes
10791,Frankenversand
10792,Wolski Zajazd
10793,Around the Horn
10794,Que Delicia
10795,Ernst Handel
10796,HILARION-Abastos
10797,Drachenblut Delikatessen
10798,Island Trading
10799,Koniglich Essen
10800,Seven Seas Imports
..........................................
 
歡迎光臨C# 2.0與LINQ的世界。
VS2005 C#与三菱PLC通讯实现:MX控件应用案例 随着软件开发的迅速发展,选择合适的开发工具对于提高工作效率至关重要。VS2005(Visual Studio 2005)作为Microsoft推出的一款集成开发环境,它不仅集成了代码编辑器、调试器、编译器和许多其他与软件开发相关的工具,而且支持多种编程语言,如C#、VB.NET、C++等。对于5年以上的IT从业者而言,VS2005带来的不仅是开发体验上的提升,而且它还为团队协作和项目管理提供了丰富的功能。 阅读详情

相关推荐

VS2005和SQL Server 2005简体中文版的开发与数据库管理宝典

Team Foundation Server(TFS)作为微软提供的一套全面的团队基础项目管理工具,集成了版本控制、工作项跟踪、构建自动化以及项目管理功能。TFS的设计初衷是为软件开发团队提供一个协作的环境,让团队成员能够更加紧密地配合,提高工作效率,同时保证项目的按时交付。TFS的核心功能组件包括:版本控制:提供了集中式的源代码管理解决方案,支持文件级别的版本控制以及分支管理。工作项跟踪:允许团队跟踪任务、需求、缺陷等,有助于项目管理和进度监控。报告和仪表板。

weixin_32869687的博客 1048

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2883

當 Visual Studio 2005遇上LINQ To SQL

當 Visual Studio 2005遇上LINQ To SQL 文/黃忠成   前陣子,我發表了VS2005遇上LINQ一文,其實有件事我未告訴各位,不過我想許多人都已經猜到了吧?  我們既然能在VS 2005中呼叫.NET Framework 3.5的LINQ函式,那這也意味著,原來的VS 2005專案,能參考VS 2008所編譯出來的Assembly。  那這有何好

黄忠成 2762

深入解析Transformer三大注意力机制:自注意力、交叉注意力与因果自注意力

注意力机制是深度学习中的核心概念,它模拟了人类在处理信息时选择性聚焦的能力。其基本原理是通过计算查询与键的相似度,动态地为值分配权重,从而提取关键信息。这一机制解决了传统序列模型(如RNN)难以并行化和捕获长距离依赖的痛点,技术价值在于显著提升了模型的计算效率和表征能力。在自然语言处理、计算机视觉等应用场景中,注意力机制已成为构建强大模型的基石。本文聚焦于Transformer架构中的三种核心注意力变体:自注意力用于建立序列内部的全局关联,交叉注意力连接编码器与解码器的信息,而因果自注意力则确保自回归生成的

weixin_29094775的博客 407

嵌入式统一消息机制:模块解耦与零拷贝通信设计

在嵌入式系统开发中,模块间通信(IMC)是影响可维护性与实时性的关键环节。传统IPC方式如全局变量、信号量或Socket易导致高耦合、调试困难及跨平台适配成本高。统一消息机制通过逻辑地址抽象、标签/实体分离、路由表驱动等原理,实现控制流与数据流解耦,在裸机、RTOS及Linux用户态保持一致接口。其技术价值在于降低模块依赖复杂度、支持动态增删与分布式迁移,并通过零拷贝优化显著减少CPU与内存开销。典型应用场景涵盖工业网关、城域交换机、多核ARM边缘设备等资源受限环境,尤其适用于需长期稳定运行、快速迭代与混合

weixin_35257663的博客 254

Using LINQ in Visual Studio 2005

Using LINQ in Visual Studio 2005 NOTE:(安装linq时要求安装的是vs的英文版否则将无法识别,还有就是得安装vs2005 sp1,其实个人觉得倒不如直接安装vs2008算了。 LINQ (.Net Language Inte...

didan3807的博客 147

机械设计师必看:如何用Autodesk Inventor高效完成钣金设计(附实战案例)

本文为机械设计师详细解析了如何利用Autodesk Inventor Professional高效完成钣金设计。文章通过一个钣金防护罩的实战案例,系统介绍了从核心设计逻辑、建模流程、参数化技巧到工程图输出的完整工作流,旨在帮助设计师掌握智能化的设计方法,显著提升从概念到制造的设计效率与准确性。

honey的博客 1181

将项目从vs2008转到Vs2005的办法

Vs2008兼容vs2005 的项目;但vs2008的项目却不能放在vs2005中,将vs2008 项目 转换成到2005 下的解决方法: 总共分为两个步骤:l         修改解决方案文件:解决方案.sln       Microsoft Visual Studio Solution File, Format Version 10.00[w1]        # Vi

adrain_sengtang的专栏 5596

DeepSeek 框架和技术栈分析

DeepSeek 诞生于对更高效、更强大的深度学习计算和模型训练的追求。随着深度学习模型的规模不断增大,如大型语言模型(LLMs)和复杂的视觉模型,传统的框架在处理这些大规模模型时面临着性能瓶颈和资源利用效率低下的问题。DeepSeek 旨在解决这些问题,通过优化框架设计和采用先进的技术栈,实现更高效的模型训练和推理,同时降低计算成本。

yournameplease的专栏 1510

【CMU-自主导航与规划】Autonomous Exploration Development Environment 实战:从环境搭建到多场景测试

本文详细介绍了CMU开源自主导航开发环境(Autonomous Exploration Development Environment)的实战部署与测试。内容涵盖从Ubuntu与ROS环境搭建、仿真场景配置,到核心导航模块(地形分析、局部避障、航点跟踪)的深度解析,并演示了如何集成TARE探索与FAR规划等上层算法,最终指导连接真实SLAM与实车部署,完成多场景性能评估。

weixin_29215391的博客 705

VS2005与VSOrcasExpress对LINQ各有所属~

各有所属的属表示项目属性。 今天终于决定实战一下LINQ。可惜在VS2005里面(已经安装了.NET Framework3.5),LINQ的语法总是带着隆重的波浪线,真的很是不爽,不用说当然是编译失败了。 上MSDN看了半天,总说要安装LINQ,但是我在那页面找了半死都没发现所谓的可安装的LINQ,只有一个指向CTP版本的Orcas。很是郁闷,看到7、8张的CD就恼火,现在的软件怎么都这么多...

weixin_30483697的博客 71

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 184

VS2005和VS2008的区别以及各自优点

1. 新的网页设计介面 VS 终於可以支援巢状 Master Page 的 WYSIWYG 设计了!我不知道有多少人曾经为了这个原因而减少或避免巢状 Master Page 的使用(我是其中之一)。VS2008 终於支援这个本来就应该有的功能,相信能在某一程度上改变大家的设计习惯。 其次,VS2008提供了 CSS 的即时编辑和套用的功能。用过 DreamWeaver 的人或许了解那是什麼意思。不

Forben 的技术园地 3809

生成对抗网络(GAN)在数据增强中的应用【附核心实战代码】

生成对抗网络(GAN)由Ian Goodfellow等人在2014年提出。它包含两个主要的部分:生成器(Generator)和判别器(Discriminator)。生成器负责生成假数据,而判别器则用于区分输入的数据是真实的还是由生成器生成的。通过这种对抗过程,生成器不断优化自己,生成越来越真实的样本。最终,生成器生成的样本几乎无法被判别器区分与真实数据。

一键难忘的博客 3120

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[翻译]转换VS2005项目到VS2008-开启LINQ(Converting VS 2005 Projects to VS 2008 - Enabling LINQ)...

原文地址:http://blogs.msdn.com/bethmassi/archive/2007/08/21/converting-vs-2005-projects-to-vs-2008.aspx 作者: Beth Massi 你有一个VS2005写的程序,你想转换它并使用在VS2008中的LINQ。在这里我将给主要的步骤,包括使LINQ工作时你可能要用到的...

weixin_30677475的博客 68

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VS2005与VS2008

2009年7月21日VS2005与VS2008最大的不同我想就是导入命名空间了。因了在VS2005中默认的导入空间要比VS2008中要少一些:VS2008中默认多的一些命名空间 System.Linq 命名空间(导入system.core.dll文件)System.Data.LinqSystem.Xml.Linq1.把VS2005写的程序导入到VS2008时,不会出现太多的问题。2.从VS2...

weixin_33997389的博客 160

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

vs2005和vs2008的区别

1. 新的网页设计介面VS 终於可以支援巢状 Master Page 的 WYSIWYG 设计了!我不知道有多少人曾经为了这个原因而减少或避免巢状 Master Page 的使用(我是其中之一)。VS2008 终於支援这个本来就应该有的功能,相信能在某一程度上改变大家的设计习惯。其次,VS2008提供了 CSS 的即时编辑和套用的功能。用过 DreamWeaver 的人或许了解那是什麼意思。不过实

如梦初醒 1227
上一篇: Effective Using LINQ To SQL (1) - 分頁技巧
下一篇: LINQ to SQL 中可以使用的LINQ函式
Code6421
博客等级 码龄20年 259粉丝 102原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值