但是上面的那个精确查询可以的。 [其他解释] 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); }
} } 上面demo是Ok的 [其他解释]
x.ObjectName为null [其他解释] 加一个括号你试试: var fiterObjs = (from i in objs select i.ObjectName).Contains(this.acbObjectName.Text.Trim()); [其他解释] var filterObjs=from i in objs where SqlMethods.Like(i.ObjectName,"%"+this.acbObjectName.Text.Trim()+"%") select i; [其他解释] x.ObjectName为null [其他解释] 自己用foreach过滤好了 [其他解释]
另外,使用SqlMethods.Like()这个方法貌似不行吧,因为这个是LINQ to SQL的东西,而你现在使用的应该是LINQ to Objects吧,两个还是有点区别的。
还有,2楼和13楼的做法不可行。如果按照你的代码要求可能应该写成下面这样的,就比较合适了: string [] Conditions = new string[]{this.acbObjectName.Text.Trim()}; IEnumerable<Objects> Result = from O in objs where Conditions.Contains(O.ObjectName) select O; 也就是说,首先用你要查询的条件组合成一个string数组,然后调用此数组的Contains()方法。如果某个对象的ObjectName已经包含在这个数组中,那就会将这个对象返回给结果集。不过,初看起来我以为这个是一个模糊查询,实际上应该是一个精确查询吧!另外,this.acbObjectName.Text.Trim()的数据只可能是ObjectName的一个子集,因此,使用此法可能永远也找不到想要的数据。 不过,以上的说法只是理论推测,没有试验过!你用你的测试环境试验吧!然后把测试的结果贴上来,咱们再交流。 [其他解释] 你试下这个? var obs =from i in objs where i.ObjectName.indexOf(this.acbObjectName.Text.Trim())>=0 select i;