欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【Cast的妙用:泛用LINQ 語句】,下面是详细的分享!
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 { } } |
仔细揣摩上面的代码,我相信你会找到一个不一样的LINQ应用手法。
以上所分享的是关于Cast的妙用:泛用LINQ 語句,下面是编辑为你推荐的有价值的用户互动:
相关问题:c#中sql语句变lambda表达式,和linq表达式。小菜鸟...
答:转的具体代码受限于你的上下文,因此是不可能给你写出来你直接运行的。但原则都是相同的。要用到的有join,匿名类型(select的那些),entitiyfunction(如果你用entitiy framework)或者sqlmethods(如果你用了linq to sql)。 >>详细
相关问题:怎样将用linq语句读出来的数据赋值给一个变量啊?
答:首先映射到linq to linq的模型上,然后读出查询的数据,通过GridView控件来操作 >>详细
相关问题:
答: >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
