北京中心
│
上海中心
│
青岛中心
│
香港中心
│
网上报名
│
在线问答
网站首页
学历教育
学院介绍
教学环境
师资介绍
公司作品
课程设置
学生作品
报名须知
就业指导
学生访谈
活动合作
教学成果
交流社区
黑板报
电子杂志
图书出版
北京中心
上海中心
青岛中心
香港中心
English
开课时间
优惠政策
付款方式
乘车方式
招生简章
关于就业
师资介绍
学生作品
关于食宿
常见问题
您在这里
首页
>
交流社区
社区首页
游客:
注册
|
登录
|
统计
|
帮助
水晶石数字论坛
»
网页设计及多媒体设计专区
» Cast的妙用:泛用LINQ 語句
‹‹ 上一主题
|
下一主题 ››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题:
[网络编程]
Cast的妙用:泛用LINQ 語句
店小一
UID 10001
精华 0
积分 0
帖子 2233
积分 11165 分
水晶石 0 颗
学徒 0 级
阅读权限 10
注册 2008-7-15
#1
使用道具
发表于 2008-8-13 16:09
资料
个人空间
短消息
加为好友
Cast的妙用:泛用LINQ 語句
什么是泛用LINQ 语句
泛用LINQ语句的概念很简单,在一些情况下,我们会有需求使用同一段程式码来对不同资料表做查询,这在ADO.NET中很容易达到,见下例:
以下为引用的内容:
static void PrintCustomerID(SqlDataReader reader)
{
Console.WriteLine(reader.GetString(reader.GetOrdinal("CustomerID")));
}
此函式接受一个Reader物件,然后顷印CustomerID栏位值,这不受限于SqlDataReader所选取的Schema或是资料表,只要Schema中有CustomerID栏位即可。
不过,这样的手法在LINQ这种Typed-Query(具型别查询语句)模式下,并没有很直觉的写法,因为你不能写下下面的句子。
以下为引用的内容:
static void Test2(int index)
{
var query;
DataClasses1DataContext context = new DataClasses1DataContext();
context.Log = Console.Out; //for log only,you can remove it.
if (index == 1)
query = context.Customers;
else
query = context.Orders;
var result = from s1 in query where s1.CustomerID.Contains("V")
select s1;
foreach (var item in result)
{
Console.WriteLine(item.CustomerID);
}
}
编译器会抱怨,var的变数必须在宣告时指定。那要如何在LINQ To SQL或是LINQ To Entites达到同样的效果呢?这有几个方法可以做到。
1、使用ExecuteQuery,并使用另一个Typed物件来接收回传集。
2、使用实体类别(Entity Class)继承。
3、使用Cast与partial class。
1与2对熟悉LINQ To SQL的读者应该不难,所以我就不再赘述了,第三个手法是较少见的,我们可以运用partial class机制,让Entity Classes实作特定介面,然后以Cast函式来达到目的。
以下为引用的内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Data.SqlClient;
namespace ConsoleApplication39
{
class Program
{
static void Main(string[] args)
{
Test(1);
Console.WriteLine("------");
Test(0);
Console.ReadLine();
}
static void Test(int index)
{
IQueryable<IGenericBaseClass> query = null;
DataClasses1DataContext context = new DataClasses1DataContext();
context.Log = Console.Out; //for log only,you can remove it.
if(index == 1)
query = context.Customers.Cast<IGenericBaseClass>();
else
query = context.Orders.Cast<IGenericBaseClass>();
var result = from s1 in query where s1.CustomerID.Contains("V") select s1;
foreach (var item in result)
{
Console.WriteLine(item.CustomerID);
}
}
}
public interface IGenericBaseClass
{
string CustomerID { get; set; }
}
partial class Customers : IGenericBaseClass
{
}
partial class Orders : IGenericBaseClass
{
}
投票
交易
悬赏
活动
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
个人空间管理
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计
清除 Cookies
-
联系我们
-
水晶石数字论坛
-
Archiver
-
WAP
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
个人空间管理
基本概况
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计