2016-04-12 99 views
1

我在ASP MVC中创建了一个actionresult,它应该显示与我的Linq查询匹配的记录。它正常工作,直到我说:like运算符给出零结果

records.State == '0' && 

这个查询(以T-SQL)返回SQL Management Studio中正确的结果,但不能使用LINQ:

public ActionResult Index(string q) 
    { 
       viewModel.Records = from records in db.records 
            where records.State == '0' && 
            records.Title.Contains(q) 
            || records.Title.Contains(q) 
            ||records.Project.Contains(q) 
            || records.Owner.Contains(q) 
            || records.Number.Contains(q) 
            select events; 
    } 
+2

是什么State'的'类型? – Shyju

+0

@Shyju这个类型是tinyint –

+1

@CitizenDB那么你为什么要把它与'char'比较呢?试试'records.State == 0'。通过比较'0',你实际上将它与数字值48比较 – juharr

回答

5

要小心你的逻辑。如果你想要的是

records.State == '0' && [whatever previous logic you have] 

你应该把你以前所有的逻辑在括号:

viewModel.Records = from records in db.records 
        where records.State == '0' && 
        (records.Title.Contains(q) 
        || records.Project.Contains(q) 
        || records.Owner.Contains(q) 
        || records.Number.Contains(q)) 
        select events; 

另外请注意,您有重复的情况records.Title.Contains(q),我在我的解决方案将其删除。

另外,如果您的records.State是数字类型(如int,不char/string),那么你不应该使用单引号,而应直接使用数量:

viewModel.Records = from records in db.records 
        where records.State == 0 && 
        (records.Title.Contains(q) 
        || records.Project.Contains(q) 
        || records.Owner.Contains(q) 
        || records.Number.Contains(q)) 
        select events; 
2

请尝试以下

public ActionResult Index(string q) 
{ 
      viewModel.Records = from records in db.records 
           where records.State == 0 && 
           (records.Title.Contains(q) 
           || records.Title.Contains(q) 
           ||records.Project.Contains(q) 
           || records.Owner.Contains(q) 
           || records.Number.Contains(q)) 
           select events; 
} 
2

你的代码将工作如果State属性的类型是char类型,因为的10是一个char

如果State类型为int/tinyint(字节),你应该这样做

where records.State == 0 
&& records.Title.Contains(q) 
2

Contains()电话看起来是正确的(虽然你有Title.Contains()两次),但你提到你的State财产是tinyint,所以你会希望它比较本身(而不是字符串,你以前是):

public ActionResult Index(string q) 
{ 
      viewModel.Records = from records in db.records 
           where records.State == 0 && (records.Title.Contains(q) 
           ||records.Project.Contains(q) 
           || records.Owner.Contains(q) 
           || records.Number.Contains(q)) 
           select events; 
}