`
sty2008boy
  • 浏览: 301021 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

Linq Like

阅读更多
System.Data.Linq.SqlClient
Like的操作,有点像in,但是,方向变了。什么意思呢。就是你给定一个字符串,去寻找数据中某个字段包含这个字符串。就是给定的字符串是某字段的子集。Sql Script是这么写的。


Selec * from table where id like '%AD%'
Selec * from table where id like '%AD'
Selec * from table where id like 'AD%'
上面的%是通配符,表示,该字段含有某个值,不知道的位置使用%代替。第一个是表示中间一段是AD,两头不清楚。第二个是结尾是AD,前面的不清楚。第三个相反,开头是AD,结尾不清楚。其对应的Linq 语句为


var q = (from c in db.Customers
where c.CustomerID.Contains("ROUT")
select c).ToList();
其生成的sql为


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 6; Prec = 0; Scale = 0) [%ROUT%]
以ISSA结尾,头部通配:


var q = (from c in db.Customers
where c.CustomerID.EndsWith("ISSA")
select c).ToList();
其生成的sql为


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [%ISSA]
以ARO开始,尾部通配:


var q = (from c in db.Customers
where c.CustomerID.StartsWith("ARO")
select c).ToList();
其生成的sql为


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 4; Prec = 0; Scale = 0) [ARO%]

Linq 还提供了一种方法,叫做SqlMethods.Like,需要先添加System.Data.Linq.SqlClient名称空间。上面的三个可以写成


var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "%ROUT%")
select c).ToList();
这里,你需要自己填写通配符,告诉Linq你是如何匹配。比如


var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "%ISSA")
select c).ToList();
再比如:


var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "ARO%")
select c).ToList();
SqlMethods.Like最奇妙的地方,莫过于,自己定义的通配表达式,你可以在任何地方实现通配。比如


var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "A%O%T")
select c).ToList();
其生成的sql为


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [A%O%T]

就是最标准的知道以A开头,以T结尾,中间知道一个值O,其他就什么不知道了。就用这个。
SQL Server 定义了四种通配符,在这里都可以使用。它们是:
Wildcard character Description Example 
% Any string of zero or more characters. WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title. 
_ (underscore) Any single character. WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on). 
[ ] Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' finds author last names ending with arsen and beginning with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. 
[^] Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE 'de[^l]%' all author last names beginning with de and where the following letter is not l.

%表示零长度或任意长度的字符串。_表示一个字符。[]表示在某范围区间的一个字符。[^]表示不在某范围区间的一个字符
比如:


var q = (from c in db.Customers
where SqlMethods.Like(c.CustomerID, "A_O_T")
select c).ToList();
就用_代表一个字符。其生成sql为


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun
try], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerID] LIKE @p0
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [A_O_T]

对于Not Like,也很简单,加个取非就是。


var q = (from c in db.Customers
where !SqlMethods.Like(c.CustomerID, "A_O_T")
select c).ToList();

SqlMethods.Like还有一个参数,叫escape Character,其将会被翻译成类似下面的语句。


SELECT columns FROM table WHERE 
column LIKE '%\%%' ESCAPE '\'
escape 是因为某字段中含有特殊字符,比如%,_ [ ]这些被用作通配符的。这时就要用到Escape了。这是sql server的事情了。

 

分享到:
评论

相关推荐

    C#_3.0_LinQ入门系列

    它结合了SQL-like语法与C#的强大功能,使得数据查询更为直观、简洁。 #### 二、LINQ与DLINQ的区别 **DLINQ**,即Database Language Integrated Query,是LINQ的一个具体应用领域,专注于数据库查询。与LINQ不同的...

    linq4j.zip

    2. **数据库查询**:结合JDBC适配器,linq4j可以编写SQL-like查询来操作数据库,减少了手动编写SQL语句的工作量。 3. **XML处理**:linq4j也可以用于解析和操作XML文档,提供了一种直观的方式来查找、修改或提取XML...

    linq文档2基于linq文档一适合读者看

    LINQ提供了一系列扩展方法,适用于集合、数组和查询结果等对象,无需使用传统的SQL-like `from...where...select` 子句。 考虑以下使用查询语法的例子: \[ \texttt{var result = from n in names where n.Starts...

    LINQ基本语法及其示例

    利用C#的`Contains`关键字来模拟SQL的`LIKE`关键字进行模糊匹配: ```csharp var q = q.Where(c => c.FTaskCode.Contains(condition.Name)); ``` 这个查询将返回所有`FTaskCode`字段包含给定名称的记录。 ##### 5...

    WPF Data Binding with LINQ to SQL

    These tutorials describe how to map your classes to your tables manually (rather than with an automated tool like SqlMetal) so that you can have support for M:M relationships and data binding against ...

    VS2008_LINQ_操作(完整)源码实例

    6. **Like**:在SQL中用于模糊匹配,但在C# LINQ中通常不直接支持,但可以通过自定义函数或正则表达式实现类似功能。 7. **Lambda表达式**:是LINQ查询中的关键部分,提供了一种简洁的、声明式的语法来定义查询操作...

    lambda-LINQ-SQL对照表

    Lambda LINQ中的字符串方法可以实现类似SQL的模糊匹配(如`LIKE 'Vice%'`)和子串查找(如`SUBSTRING(e.JobTitle, 0, 3) = 'Pro'`)。例如,使用`StartsWith`方法: ```csharp // SQL: SELECT e.* FROM Human...

    LINQ to SQL语句(23)之动态查询

    string search = "Name LIKE '%John%'"; var customers = db.Customers.Where(search); ``` 这里,`search`字符串被解析成一个表达式树,然后在数据库中执行。这种做法使得我们可以在不提前知道具体查询条件的情况...

    C# 3.0 LinQ入门系列

    10. **In 和 Like 操作**:`In`和`Like`操作符在LINQ中提供了类似于SQL的过滤条件,`In`用于检查元素是否在给定的列表中,而`Like`则用于模式匹配,类似于SQL的LIKE关键字。 11. **Lambda 表达式中的 Lifting**:...

    Linq入门(word)

    - `In`和`Like`:在某些特定的LINQ提供者中,如LINQ to SQL,可以使用`In`操作符进行成员比较,`Like`用于模式匹配。 8. 示例: ```csharp var numbers = new int[] { 1, 2, 3, 4, 5 }; var evenNumbers = from...

    LINQ to SQL语句(9)之Top 和Bottom和Paging和SqlMethods

    在.NET框架中,LINQ(Language Integrated Query,语言集成查询)为开发者提供了一种强大而简洁的方式来处理数据,特别是在SQL Server数据库中的数据操作。本篇文章将深入探讨LINQ to SQL语句中关于“Top”、...

    Linq to sql

    模糊查询可以使用`Contains`方法,等同于SQL中的`LIKE '%ABC%'`。 **3. 数据总数** 获取数据总数可以使用`Count()`方法: ```csharp int totalNo = dc.Table1.Count(); ``` 如果需要加条件,可以在`Count()`内传入...

    事件委托加linq的操作

    string name = "my name is fly and I like eat apples"; //用数组分开 string[] delete = name.Split(' '); foreach (var item in delete) { //此时的 w 实际上就是匿名 方法 Console.WriteLine(w(item)); ...

    LinQ 示例代码

    1. **LinQ基础**:LinQ是C#中的一个强大的特性,它允许开发者使用SQL-like的语法进行集合、数组、XML和数据库查询。基础概念包括查询表达式(query expressions)、From子句、Where子句、Select子句和GroupBy子句等...

    LINQ_to_SQL语法及实例大全

    SqlMethods提供了一组可以用来执行SQL特定操作的扩展方法,比如Like用于模糊匹配。 10. LINQ to SQL语句之Insert、Update、Delete和使用Attach:这些语句分别用于插入新数据、更新数据、删除数据以及在数据已修改的...

Global site tag (gtag.js) - Google Analytics