在新的 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数据库 连接问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)