//这个方法报错了
    void WhereFor()
    {   
        var session = Z.Core.NHibernateCore.NHibernateHelper.GetCurrentSession();
        var query = session.Linq<Model.Pub.Goods>().Where(l => 1 == 1);
        var goods = new string[] { "A", "B", "C" };
        for (int i = 0; i <= goods.Length - 1; i++)
        {
            query = query.Where(l => l.Code != goods[i]);
        }
        var count = query.Count();
        Console.Write(count);
    }
    //这个方法没有报错正常运行,但他和上面的方法唯一区别就是声明了var item = goods[i]; 来代替goods[i]
    void WhereForDeclare()
    {
        var session = Z.Core.NHibernateCore.NHibernateHelper.GetCurrentSession();
        var query = session.Linq<Model.Pub.Goods>().Where(l => 1 == 1);
        var goods = new string[] { "A", "B", "C" };
        for (int i = 0; i <= goods.Length - 1; i++)
        {
            var item = goods[i];
            query = query.Where(l => l.Code != item);
        }
        var count = query.Count();
        Console.Write(count);
    }
    //这个方法也没有报错正常运行
    void WhereForeach()
    {
        var session = Z.Core.NHibernateCore.NHibernateHelper.GetCurrentSession();
        var query = session.Linq<Model.Pub.Goods>().Where(l => 1 == 1);
        var goods = new string[] { "A", "B", "C" };
        foreach (var item in goods)
        {
            query = query.Where(l => l.Code != item);
        }
        var count = query.Count();
        Console.Write(count);
    }这到底是为什么呢?

解决方案 »

  1.   

     void WhereFor()
        {   
            var session = Z.Core.NHibernateCore.NHibernateHelper.GetCurrentSession();
            var query = session.Linq<Model.Pub.Goods>().Where(l => 1 == 1);
            var goods = new string[] { "A", "B", "C" };
      
                query = query.Where(l => !goods .Contains(l.Code));
            
            var count = query.Count();
            Console.Write(count);
        }
      

  2.   

    string lst= string.Join(",", goods.Cast<string>().ToArray());
    query.Where("Code in {"+lst+"}");Where(p=>!goods.Contains(p.Code))