2014-02-24 138 views
0

我试图做一个LINQ到实体声明,条件之一是要包含通配符%LINQ到实体通配符%

我有下面的代码,如果我从2个连击删除%箱我得到的结果

var SLogged = from p in OEEEntity.Scrappages 
          where p.Date >= StartDate 
          where p.Date <= EndDate 
          where p.LogType.Contains(cmbType.Text) 
          where p.ScrapCode.Contains(cmbCode.Text) 
          orderby p.Date ascending 
          select p; 

将包含%的值是cmbType和cmbCode

任何人知道我可以做到这一点。

+0

为什么不从字符串中移除'%'?由于您使用的'contains'应该转换为使用'%'的SQL。 –

回答

2

.Contains("aaa")相当于LIKE '%aaa%'

.StartsWith("aaa")相当于LIKE 'aaa%'

.EndsWith("aaa")相当于LIKE '%aaa'

所以您不必手动添加 '%'。

+0

如果用户确实从下拉列表中选择了%,而不是组合框中的项目筛选器,我要看的是。几乎就像跳过那里。 – Inkey

+0

您可以随时管理用户选择的内容以及查询的功能。 –

0

使用任何字符串操作,返回一个布尔值:

var myString = "This is some text"; 
myString.Contains("some"); 
0

最佳处理通配符的方式是使用PatIndex

var SLogged = (from p in OEEEntity.Scrappages 
          where p.Date >= StartDate 
          && p.Date <= EndDate 
          && SqlFunctions.PatIndex(cmbType.Text, p.LogType) > 0 
          && SqlFunctions.PatIndex(cmbCode.Text,p.ScrapCode) > 0 
          orderby p.Date ascending 
          select p).ToList(); 
0

这不回答这个问题,因为OP没实际上在OP中问他的问题。

var queryText = cmbType.Text; 
var SLogged = from p in OEEEntity.Scrappages 
         where p.Date >= StartDate 
         where p.Date <= EndDate 
         where p.LogType.Contains(queryText) 
           || string.IsNullOrEmpty(queryText) 
         where p.ScrapCode.Contains(queryText) 
           || string.IsNullOrEmpty(queryText) 
         orderby p.Date ascending 
         select p;