首页 > 语言 > 关键词  > Linq最新资讯  > 正文

Cast的妙用:泛用LINQ 語句

2008-07-12 15:41 · 稿源:中国站长站

什么是泛用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
{
}
}

仔细揣摩上面的代码,我相信你会找到一个不一样的LINQ应用手法。

举报

  • 相关推荐
  • 腾讯云TencentOS提交Swap Table补丁系列 Linux内核内存交换性能提升20%~30%

    腾讯云操作系统团队提交了名为Swap Table的补丁系列,针对Linux内核交换子系统进行优化。该系列在4K页面和mTHP folios场景下,使系统性能提升20%-30%。Swap Table通过智能调度机制优化数据定位,支持大页尺寸减少操作次数,并实现动态空间扩展。27项独立改进解决了历史遗留问题,经实测性能显著提升。目前补丁系列正处于审核阶段,有望纳入Linux内核主线。这是腾讯云团队继内存控制组、页面热管理等创新后,在操作系统核心技术领域的又一突破,将强化TencentOS Server的高性能优势。

  • ​沃链Wolink:服务于商家和创作者的全球营销平台

    沃链Wolink打造一站式海外营销平台,连接全球品牌与优质创作者,提供从任务发布、创作者匹配、内容制作到多平台发布、支付结算的全流程服务。平台整合200+创作者代理资源,支持135种货币支付,帮助品牌高效拓展海外社交媒体影响力。通过精准达人种草和素人场景化渗透,实现低成本本地化营销。创作者可自由接单变现,小账号也能获得稳定收入。平台提供数据分析工具�

  • Neuralink脑机突破新里程碑,微美全息(WIMI.US)多线发力抢滩百亿市场

    马斯克旗下Neuralink宣布成功完成首例同日双台脑机接口手术,标志着手术效率显著提升。该公司计划2028年实现全脑接口,电极数量将从2026年的3000个增至超2.5万个,并与AI深度融合。脑机接口技术已进入高速增长期,主要应用于医疗康复领域,全球市场规模预计达千亿美元。微美全息等科技企业正加速布局,推动技术从实验室走向商业化。尽管仍处商业化初期,但不同技术路线的脑机接口已逐步进入临床,预计未来五年将在医疗领域实现规模化应用。

  • 高通官宣:小米将首发骁龙8 Elite 2

    虽然小米已经自研了3nm玄戒O1芯片,但依然不影响与高通的深度合作。 据AndroidCentral报道,高通在最新的财报电话会议上宣布,小米将首发搭载下一代旗舰芯片骁龙8 Elite 2。 甚至高通还强调,这并不令人意外,因为小米经常是骁龙芯片的首发厂商。 据悉,今年的高通骁龙峰会2025将于9月23日-9月25日举行,届时骁龙8 Elite 2将正式登场。 骁龙8 Elite 2型号是SM8850,现阶段的CPU主频

  • 荣耀Magic V Flip2本月登场:电池最大的小折叠

    博主数码闲聊站爆料,荣耀Magic V Flip2将在8月份发布,代号Celine。 据悉,荣耀Magic V Flip2内置5500mAh电池,支持80W闪充,提供月影白、钛空灰、晨曦紫和织梦蓝四种配色,是行业内电池最大的小折叠屏。 核心配置上,荣耀Magic V Flip2将搭载骁龙8系次旗舰芯片,预计是第四代骁龙8s,该芯片采用台积电4nm工艺打造。

  • 小米16首发骁龙8 Elite 2:高通芯片发布后紧接着发新机

    博主数码闲聊站表示,小米16系列、荣耀Magic8系列、真我GT8 Pro、iQOO15都陆续开始超前瞻预热,主要是这代骁龙8 Elite 2芯片大提档,大家都在抢档期,首发厂商就在芯片发布后紧接着发新机,希望是发布即开售,国庆假期前让用户拿到新机。 根据爆料的消息,首发厂商是小米,其年度旗舰小米16系列将在9月登场,这次小米将同时推出三款机型,分别是小米16和小米16 Pro,Pro版有�

  • Checkout.com携手Visa推出发卡业务 (Card Issuing)

    Checkout.com与Visa达成战略合作,在英国及欧洲地区推出全方位发卡业务。通过Visa全球支付网络,商户可即时获取收款资金用于支付供应商款项,显著提升资金使用效率。该合作特别针对旅游业企业,解决其支付流程分散、资金周转慢的痛点。Checkout.com每年处理数千亿交易的技术能力与Visa网络结合,帮助商户消除预存资金需求,优化现金流管理。双方表示这将大幅提升欧洲商户运营效率,释放增长潜力。

  • 华为全新FreeClip 2耳夹耳机首曝:最快9月发布 支持星闪

    日前,据数码博主定焦数码”爆料,华为全新耳夹耳机FreeClip 2预计9-10月发布。 该博主透露,华为FreeClip 2的C桥部分会有微调,整体设计变化不大,声场拓宽,将支持星闪功能。 据了解,2023年12月,华为发布首款开放式耳机FreeClip,售价1299元。

  • 骁龙8 Elite 2旗舰超前预热!真我GT8/GT8 Pro双剑齐发

    realme副总裁徐起与网友互动时确认,真我GT8和GT8 Pro将会同时发布,而且真我将会举办线下发布会。 这是真我超前预热骁龙8 Elite 2旗舰,博主数码闲聊站透露,真我GT8系列会在10月份登场,正面迎战友商旗舰。

  • OPPO Find X9 Ultra曝光:首款骁龙8 Elite 2双潜望旗舰

    博主数码闲聊站爆料,OPPO Find X9 Ultra仍然是迭代旗舰中唯一一款拥有双潜望长焦的机型。 据悉,OPPO Find X9 Ultra配备2亿像素主摄、2亿像素潜望长焦、5000万潜望长焦和超广角,组成全新的哈苏四摄系统,该机不仅拥有双潜望,还是业界罕见的双2亿像素方案。 相比传统的单潜望镜方案,双潜望最明显优势是覆盖的焦段更多,不同焦段可以营造出不同的氛围感,实现更高的创作自