代码之家  ›  专栏  ›  技术社区  ›  priyanka.sarkar

LINQ中的WHERE IN子句[副本]

  •  131
  • priyanka.sarkar  · 技术社区  · 16 年前

    这个问题已经有了答案:

    如何使WHERE IN子句与SQL Server中的子句相似?

    我自己做了一个,但是有人能改进一下吗?

        public List<State> Wherein(string listofcountrycodes)
        {
            string[] countrycode = null;
            countrycode = listofcountrycodes.Split(',');
            List<State> statelist = new List<State>();
    
            for (int i = 0; i < countrycode.Length; i++)
            {
                _states.AddRange(
                     from states in _objdatasources.StateList()
                     where states.CountryCode == countrycode[i].ToString()
                     select new State
                     {
                        StateName  = states.StateName                    
    
                     });
            }
            return _states;
        }
    
    8 回复  |  直到 11 年前
        1
  •  215
  •   Daniel Brückner    12 年前

    这个表达应该做你想做的。

    dataSource.StateList.Where(s => countryCodes.Contains(s.CountryCode))
    
        2
  •  87
  •   Scott Ivey    16 年前

    这将转换为LINQ to SQL中的WHERE IN子句…

    var myInClause = new string[] {"One", "Two", "Three"};
    
    var results = from x in MyTable
                  where myInClause.Contains(x.SomeColumn)
                  select x;
    // OR
    var results = MyTable.Where(x => myInClause.Contains(x.SomeColumn));
    

    在查询的情况下,您可以这样做…

    var results = from states in _objectdatasource.StateList()
                  where listofcountrycodes.Contains(states.CountryCode)
                  select new State
                  {
                      StateName = states.StateName
                  };
    // OR
    var results = _objectdatasource.StateList()
                      .Where(s => listofcountrycodes.Contains(s.CountryCode))
                      .Select(s => new State { StateName = s.StateName});
    
        3
  •  30
  •   nawfal Donny V.    12 年前

    我喜欢它作为一种扩展方法:

    public static bool In<T>(this T source, params T[] list)
    {
        return list.Contains(source);
    }
    

    现在你打电话:

    var states = _objdatasources.StateList().Where(s => s.In(countrycodes));
    

    您也可以传递单个值:

    var states = tooManyStates.Where(s => s.In("x", "y", "z"));
    

    感觉更自然,更接近SQL。

        4
  •  7
  •   Libertine Makinta    11 年前
    public List<Requirement> listInquiryLogged()
    {
        using (DataClassesDataContext dt = new DataClassesDataContext(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
        {
            var inq = new int[] {1683,1684,1685,1686,1687,1688,1688,1689,1690,1691,1692,1693};
            var result = from Q in dt.Requirements
                         where inq.Contains(Q.ID)
                         orderby Q.Description
                         select Q;
    
            return result.ToList<Requirement>();
        }
    }
    
        5
  •  6
  •   nikmd23    12 年前

    “in”子句通过.contains()方法内置到LINQ中。

    例如,让所有州为“NY”或“FL”的人:

    using (DataContext dc = new DataContext("connectionstring"))
    {
        List<string> states = new List<string>(){"NY", "FL"};
        List<Person> list = (from p in dc.GetTable<Person>() where states.Contains(p.State) select p).ToList();
    }
    
        6
  •  4
  •   Andrija    16 年前
    from state in _objedatasource.StateList()
    where listofcountrycodes.Contains(state.CountryCode)
    select state
    
        7
  •  2
  •   Laksh    13 年前

    这个想法有点不同。但它对你有用。我在LINQ主查询中使用了子查询to。

    问题:

    假设我们有文档表。架构如下 图式: 文档(名称、版本、作者、修改日期) 组合键:名称,版本

    所以我们需要得到所有文档的最新版本。

    溶质

     var result = (from t in Context.document
                              where ((from tt in Context.document where t.Name == tt.Name
                                    orderby tt.Version descending select new {Vesion=tt.Version}).FirstOrDefault()).Vesion.Contains(t.Version)
                              select t).ToList();
    
        8
  •  1
  •   Siva    13 年前
    public List<State> GetcountryCodeStates(List<string> countryCodes)
    {
        List<State> states = new List<State>();
        states = (from a in _objdatasources.StateList.AsEnumerable()
        where countryCodes.Any(c => c.Contains(a.CountryCode))
        select a).ToList();
        return states;
    }