복붙노트

[SQL] 는 SQL IN 연산자에 LINQ 상응하는 무엇입니까

SQL

는 SQL IN 연산자에 LINQ 상응하는 무엇입니까

LINQ I으로 연속하는 값이 배열에 존재하는지 확인한다. SQL 쿼리의 등가 :

WHERE ID IN (2,3,4,5)

내가 어떻게 해?

해결법

  1. ==============================

    1..Contains

    .Contains

    var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x
    

    물론, 당신의 간단한 문제, 당신이 뭔가를 같이 할 수 :

    var resultset = from x in collection where x >= 2 && x <= 5 select x
    
  2. ==============================

    2.IEnumerable.Contains과 SQL에서의 동등한를 수행합니다 ().

    IEnumerable.Contains과 SQL에서의 동등한를 수행합니다 ().

    var idlist = new int[] { 2, 3, 4, 5 };
    
    var result = from x in source
              where idlist.Contains(x.Id)
              select x;
    
  3. ==============================

    3.

    db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x));
    

    또는

    from x in db.SomeTable
    where new[] {2,3,4,5}.Contains(x)
    
  4. ==============================

    4.교차되지 않는 한 관련은 조금 더의 간결하고 아마 너무 조금 빠를 것이다.

    교차되지 않는 한 관련은 조금 더의 간결하고 아마 너무 조금 빠를 것이다.

    collection.Intersect(new[] {2,3,4,5});
    

    NOT IN

    collection.Except(new[] {2,3,4,5});
    

    또는

    IN의 메서드 구문

    collection.Where(x => new[] {2,3,4,5}.Contains(x));
    

    및 NOT IN

    collection.Where(x => !(new[] {2,3,4,5}.Contains(x)));
    
  5. ==============================

    5.를 IEnumerable .Contains (T) 문은 당신이 찾고있는 무엇을해야한다.

    를 IEnumerable .Contains (T) 문은 당신이 찾고있는 무엇을해야한다.

  6. ==============================

    6..Contains을 사용하여 매우 기본적인 예 ()

    .Contains을 사용하여 매우 기본적인 예 ()

    List<int> list = new List<int>();
    for (int k = 1; k < 10; k++)
    {
        list.Add(k);
    }
    
    int[] conditionList = new int[]{2,3,4};
    
    var a = (from test in list
             where conditionList.Contains(test)
             select test);
    
  7. ==============================

    7.당신은 도움-방법을 쓸 수 있습니다 :

    당신은 도움-방법을 쓸 수 있습니다 :

        public bool Contains(int x, params int[] set) {
            return set.Contains(x);
        }
    

    짧은 코드를 사용 :

        var resultset = from x in collection
                        where Contains(x, 2, 3, 4, 5)
                        select x;
    
  8. ==============================

    8.이 기능은 기본 요소에 대해 사용이 포함 된 경우 위의 상황은 작동하지만 당신은 객체 (예를 들어, myListOrArrayOfObjs.Contains (efObj))을 어떻게 처리하는 경우?

    이 기능은 기본 요소에 대해 사용이 포함 된 경우 위의 상황은 작동하지만 당신은 객체 (예를 들어, myListOrArrayOfObjs.Contains (efObj))을 어떻게 처리하는 경우?

    나는 해결책을 발견! 문자열로 efObj 변환, 그게 전부는 (당신은 거의 당신의 OBJ의 CSV 표현으로 생각할 수) 각 필드에 대해 _로 구분

    등의 예는 다음과 같이 보일 수 있습니다 :

         var reqAssetsDataStringRep = new List<string>();
    
            foreach (var ra in onDemandQueueJobRequest.RequestedAssets)
            {
                reqAssetsDataStringRep.Add(ra.RequestedAssetId + "_" + ra.ImageId);
            }
    
            var requestedAssets = await (from reqAsset in DbContext.RequestedAssets
                                         join image in DbContext.Images on reqAsset.ImageId equals image.Id
                                         where reqAssetsDataStringRep.Contains(reqAsset.Id + "_" + image.Id)
                                         select reqAsset
                                               ).ToListAsync();
    
  9. ==============================

    9.다음은 값 목록에서 값을 검색하는 데 사용할 수있는 일반적인 확장 방법이다 :

    다음은 값 목록에서 값을 검색하는 데 사용할 수있는 일반적인 확장 방법이다 :

        public static bool In<T>(this T searchValue, params T[] valuesToSearch)
        {
            if (valuesToSearch == null)
                return false;
            for (int i = 0; i < valuesToSearch.Length; i++)
                if (searchValue.Equals(valuesToSearch[i]))
                    return true;
    
            return false;
        }
    

    이것은로 사용할 수 있습니다 :

    int i = 5;
    i.In(45, 44, 5, 234); // Returns true
    
    string s = "test";
    s.In("aa", "b", "c"); // Returns false
    

    이 조건문에 편리합니다.

  10. from https://stackoverflow.com/questions/2334327/what-is-the-linq-equivalent-to-the-sql-in-operator by cc-by-sa and MIT license