用LINQtoSQL创建Web应用系统(一)

用LINQtoSQL创建Web应用系统(一),第1张

在新的 Net Framework 平台上 Microsoft发布了LINQ(C# VB Net ) 集成语言查询(Language Integrated Query) 也就是通过编程语言来查询数据

数据库 (LINQ to SQL)

DataSet 数据集(LINQ to Dataset)

XML文档 (LINQ to XML)

实体对象 (LINK to Entities)

本文将演示如何在ASP NET 平台上 使用LINQ to SQL构建多层的Web应用程序 在当前的编程领域中 创建N Tier应用程序成为一般的要求 且 NET Framework 提供了灵活的支持 一般而言 N Tier应用程序有如下几个层 表示层 业务逻辑层 数据访问层 数据库层 每一层均完成特定的任务 本篇文章中介绍的架构和经典的N Tier相似 不过数据库层替换新的DataLinq 层 使用LINQ to SQL 完成数据 *** 作        

图 基于LINQ to SQL的N Tier架构

架构思考

如果你有大型ASP NET项目的经历 你可能会注意到更多的时间花在写组件代码 而不是Web页面代码 有时 组件的设计和管理成为一个费时的过程 你可能正遇到架构方面的问题 寻找最好的方式来设计Web应用程序

我写这篇文章的想法是介绍一个好的设计模式 并不是得到一个结论或者声明这是一个最好的N Tier应用程序的设计模式 因为对于架构设计 每一个开发人员总是有自己的观点 所以任何合适的架构阐述都是有争议的 然而 如图 所示 分离不同的代码到不同的层总是一个好的实践 按这样组织代码 可以更方便地维护和扩展应用程序

在图 中 你可以看到业务组件分割到不同的层 组织代码最好的方法是为每一个业务组件创建不同的类库(Class Library) Visual Studio允许在同一个Solution中创建多个项目 因此 我们可以在同一个Solution中加入ASP NET 应用程序和类库Class Library项目 当你在编译Solution时 每一个项目都会生成在bin目录下生成一个assembly程序集文件 方法 我们可以手动复制 DLL文件到应用程序的bin目录 方法 增加项目引用 当你编译Solution时 第二种方法可以自动更新应用程序bin目录的程序集文件 通过这种方式组织代码 可以更容易修改/更新项目的特定代码 也容易从不同的Server上迁移代码 我不想深入探讨架构 这里我通过截屏来解释如何实现

假定你已经具备经典 层架构应用程序的设计经验 我告诉你如何建立层与层之间的引用关系 接着你可以自己建立项目引用 图 上的箭头符号说明了不同层之间的交互 说明如下

( ) 数据访问层引用Data Linq 层( 开源小组注 原文说还需要引用业务外观(Business Facade)层 原文有误)

( ) 业务外观(Business Facade)层引用Data Linq 层和数据访问层 因为业务外观层使用Data Linq层的业务实体来创建表实体(后面进行详细讨论) 同时调用数据访问层的方法

lishixinzhi/Article/program/net/201311/12345

假设你上图表格数据为 DataTable dt,列分别为AA,BB,CC,DD

var query = from p in dtAsEnumerable()

//分组

group p by new

{

t1 = pField<int>("AA")ToString()Substring(0, pField<int>("AA")ToString()Length - 2),

t2 = pField<double>("BB"),

t3 = pField<string>("CC")

} into g

select new

{

ColA = gKeyt1,

ColB = gKeyt2,

ColC = gKeyt3,

ColD = gSum(c => cField<int>("DD"))

};

//转datatable

DataTable dtNew = dtClone();

DataRow drNew;

foreach (var p in query)

{

drNew = dtNewNewRow();

drNew["AA"] = pColA;

drNew["BB"] = pColB;

drNew["CC"] = pColC;

drNew["DD"] = pColD;

dtNewRowsAdd(drNew);

}

dtNew 为最终结果

注:转换过程中要考虑空值的情况

你看一下这个if(trans_UserTestID(ConvrtToInt32(txttoIDTextTrim())),txttoNameTextTrim())

中的txttoIDTextTrim()取没有取到值,如果取到的值在数据库里面存不存在。

财富值为零也不要紧,这里探讨主要是大家互相帮助嘛~

OrderID = Session["userName"]ToString(),

你的这句代码是需要前面传值过来的,运行这个页面的时候没有Session["userName"]传值过来系统就认为你没有将对象引用为实例了。

语言集成查询(Language Intergrated Query ,LINQ),LINQ是集成到c#语言中的一个面向对象的统一查询模型,是一种独立于数据源的查询语言来访问特定数据的解决方案。LINQ也是面向对象的,而且也可以扩展,在一定程度上使c#更接近于函数式编程,使开发人员的关注焦点从数据(状态)的具体细节转移到信息(对象)行为。并且它还为数据查询提供了一个统一的模型,不再依赖于某种特定语言或技术的难以预测的变化。通过LINQ可以使用同一查询模型访问SQL数据库和XML文件,还可以用来访问数据。

技术:LINQ定义了大约40个查询 *** 作符;如下

<1>排序

OrderBy

按升序对值进行排序。

OrderByDescending

按降序对值进行排序。

ThenBy

按升序执行次要排序。

ThenByDescending

按降序执行次要排序。

Reverse

颠倒集合中的元素的顺序。

<2>Set 运算

Distinct

从集合移除重复值。

Except

返回差集,差集是指位于一个集合但不位于另一个集合的元素。

Intersect

返回交集,交集是指同时出现在两个集合中的元素。

Union

返回并集,并集是指位于两个集合中任一集合的唯一的元素。

<3>Filtering Data(筛选数据)

OfType

根据值强制转换为指定类型的能力选择值。

Where

选择基于谓词函数的值。

<4>限定符 *** 作

All

确定是否序列中的所有元素都满足条件。

Any

确定序列中是否有元素满足条件。

Contains

确定序列是否包含指定的元素。

<5>数据分区

Skip

跳过序列中的指定位置之前的元素。

SkipWhile

基于谓词函数跳过元素,直到某元素不再满足条件。

Take

提取序列中的指定位置之前的元素。

TakeWhile

基于谓词函数提取元素,直到某元素不再满足条件。

<6>联接运算

Join

根据键选择器函数联接两个序列并提取值对。

GroupJoin

根据键选择器函数联接两个序列,并对每个元素的结果匹配项进行分组。

<7>数据分组

GroupBy

对共享公共属性的元素进行分组。每个组都由一个 IGrouping<TKey, TElement>对象表 示。

ToLookup

根据键选择器函数将元素插入到 Lookup<TKey, TElement> (一个一对多字典)中。

<8>生成 *** 作

DefaultIfEmpty

将空集合替换为具有默认值的单一实例集合。

Empty

返回空集合。

Range

生成包含数字序列的集合。

Repeat

生成包含一个重复值的集合。

<9>元素 *** 作

ElementAt

返回集合中指定索引处的元素。

ElementAtOrDefault

返回集合中指定索引处的元素;如果索引超出范围,则返回默认值。

First

返回集合中的第一个元素或满足条件的第一个元素。

FirstOrDefault

返回集合中的第一个元素或满足条件的第一个元素。如果没有这样的元素,则返回默认值。

Last

返回集合中的最后一个元素或满足条件的最后一个元素。

LastOrDefault

返回集合中的最后一个元素或满足条件的最后一个元素。如果没有这样的元素,则返回默认值。

Single

返回集合中的唯一元素或满足条件的唯一元素。

SingleOrDefault

返回集合中的唯一元素或满足条件的唯一元素。如果没有这样的元素或集合不是正好包含一个元素,则返回默认值。

<10>converting Data Types (转换数据类型)

AsEnumerable

返回类型为 IEnumerable< T> 的输入。

AsQueryable

将(泛型) IEnumerable 转换为(泛型) IQueryable。

Cast

将集合的元素强制转换为指定类型。

OfType

根据值强制转换为指定类型的能力筛选值。

ToArray

将集合转换为数组。此方法强制执行查询。

ToDictionary

根据键选择器函数将元素放入 Dictionary< TKey, TValue> 中。 此方法强制执行查询。

ToList

将集合转换为 List<T> 。 此方法强制执行查询。

ToLookup

根据键选择器函数将元素放入 Lookup< TKey, TElement> (一对多字典)中。 此方法强制执行查询。

<11>串联运算

Concat

串联两个序列以组成一个序列。

<12>聚合 *** 作

Aggregate

对集合值执行自定义聚合运算。

Average

计算值集合的平均值。

Count

对集合中的元素进行计数,还可以仅对满足某一谓词函数的元素进行计数。

LongCount

对大型集合中的元素进行计数,还可以仅对满足某一谓词函数的元素进行计数。

Max

确定集合中的最大值。

Min

确定集合中的最小值。

Sum

计算集合中值的总和。

以上就是关于用LINQtoSQL创建Web应用系统(一)全部的内容,包括:用LINQtoSQL创建Web应用系统(一)、C#用LINQ *** 作Datatable数据库、SQL linq C#.net数据库 连接问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9466411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存