代码之家  ›  专栏  ›  技术社区  ›  Nick

在.NET framework中是否有类似于sql IN语句的内容?

  •  6
  • Nick  · 技术社区  · 15 年前

    我有这个功能:

        public bool IsValidProduct(int productTypeId)
        {
            bool isValid = false;
    
            if (productTypeId == 10 ||
                productTypeId == 11 ||
                productTypeId == 12)
            {
                isValid = true;
            }
    
            return isValid;
        }
    

    但我想知道是否有更简单的方法来写它,比如:

        public bool IsValidProduct(int productTypeId)
        {
            bool isValid = false;
    
            if (productTypeId.In(10,11,12))
            {
                isValid = true;
            }
    
            return isValid;
        }
    

    我知道我可以编写一个扩展方法来处理这个问题,我只是好奇是否已经有了一些东西,或者是否有更好的方法来编写它。

    8 回复  |  直到 15 年前
        1
  •  11
  •   Mehrdad Afshari    15 年前
    new [] {10, 11, 12}.Contains(productTypeId)
    
        2
  •  5
  •   JaredPar    15 年前

    不,我不这么认为,但是您可以编写一个这样的扩展方法,它允许您的代码完全按照编写的方式工作。

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

        3
  •  3
  •   Botz3000 Amir Sheng    15 年前

    嗯,你可以这样做:

    public bool IsValidProduct(int productTypeId)
    {
        bool isValid = false;
    
        if (new[] {10,11,12}.Contains(productTypeId))
        {
            isValid = true;
        }
    
        return isValid;
    }
    

    public bool IsValidProduct(int productTypeId)
    {
        return (new[] {10,11,12}.Contains(productTypeId));
    }
    
        4
  •  2
  •   Quintin Robinson    15 年前

    new int[] { 10,11,12 }.Contains(productTypeID);
    

    public static bool In(this int i, params int[] ints)
    {
        return ints.Contains(i);
    }
    

    使用:

    if (productTypeID.In(10,11,12)) { ... }
    

    我不会说他们是最有效率的,但可能是的。

        5
  •  1
  •   Lee    15 年前

    我认为框架中没有任何东西,所以您必须编写自己的扩展方法。与linq最接近的是:

    
    if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... }
    
        6
  •  0
  •   Judah Gabriel Himango    15 年前

    您可以使用.NET 3.5中的Contains扩展方法。它适用于所有可枚举类型:

    if (new [] { 10, 11, 12 }.Contains(productTypeId))
    {
        ...
    }
    
        7
  •  0
  •   JontyMC    15 年前


    validIds.Contains(productId);

        8
  •  0
  •   Crispy    15 年前

    如果您想要的数字都在一个范围内,而不是功能上完全“在”的话,这将起作用,但您可能会发现它很有用。

    if (Enumerable.Range(10, 3).Contains(productTypeId))