Linq to Entities Wildcard%

时间:2014-02-24 14:40:35

标签: c# linq linq-to-entities

我正在尝试执行linq to entity语句,其中一个条件是包含通配符%

我有以下代码,如果我从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

任何人都知道如何做到这一点。

4 个答案:

答案 0 :(得分:2)

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

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

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

因此您无需手动添加'%'。

答案 1 :(得分:0)

使用任何返回bool值的字符串操作:

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

答案 2 :(得分: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();

答案 3 :(得分: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;