日期:2014-05-20  浏览次数:21016 次

Linq模糊查询
这句代码如何写出模糊查询。
List<Objects> objs;
IEnumerable<Objects> fiterObjs = objs.Where(x => x.ObjectName==this.acbObjectName.Text.Trim());
我试了这样子写,可是不行
IEnumerable<Objects> fiterObjs = objs.Where(x => x.ObjectName.Contains(this.acbObjectName.Text.Trim()));

------最佳解决方案--------------------
SqlMethods.Like 是生成sql语句时,应该 不能用。
既能 ObjectName可能为null,加上判断 。

IEnumerable<Objects> fiterObjs = objs.Where(x => x.ObjectName!=null&&x.ObjectName.Contains(this.acbObjectName.Text.Trim()));


------其他解决方案--------------------
提示:未将对象引用设置到对象的实例

但是上面的那个精确查询可以的。
------其他解决方案--------------------
IQueryable <T>接口本来就没有Contains方法
from o in db.Orders
where (
new string[] { "A", "B", "C" })
.Contains(o.ID)
------其他解决方案--------------------
可以的,没有问题的,再检查一下。
------其他解决方案--------------------
光看代码 是没有问题的。

未将对象引用设置到对象的实例 是指哪个? 调试一下

------其他解决方案--------------------
我改写成 var fiterObjs = from i in objs where i.ObjectName.Contains(this.acbObjectName.Text.Trim()) select i;也是一样的。
郁闷

------其他解决方案--------------------
我测试了一下contans方法,搞一个静态数据源:
 class Program
    {
        static void Main(string[] args)
        {
            List<User> lstUesr = new List<User>() { new User{Id="sdf",Name="wfuc"},
                new User{Id="sfdds",Name="sdfwer"},
                new User{Id="iuy",Name="ljk"},
                 new User{Id="iuy",Name="ab"},
                  new User{Id="iuy",Name="abc"},
                   new User{Id="iuy",Name="eabc"},
                    new User{Id="iuy",Name="rabre"},
                     new User{Id="iuy",Name="tabtrc"}
            };
            IEnumerable<User> query = lstUesr.Where(x => x.Name.Contains("ab"));
            foreach (User item in query)
            {
                Console.WriteLine(item.Name);
            }