.NET框架中类似于SQL IN语句的东西是什么?

6

我有这个函数:

    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个回答

11
new [] {10, 11, 12}.Contains(productTypeId)

5

不,我不这么认为,但是你可以编写一个扩展方法,使你的代码可以按照原样工作。

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

数组开销有点大,所以你可能需要为较少的固定参数添加特殊情况。

希望这已经在LINQ中了,但这可以使代码更加简洁明了。 - Nick

3

嗯,你可以这样做:

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));
}

2
您可以做类似以下的事情:

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

或者更进一步,按照以下方式创建一个int扩展:
public static bool In(this int i, params int[] ints)
{
    return ints.Contains(i);
}

使用方法:

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

我不会说它们是最高效的,但可能是可以的。


1

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


if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... }

0

如果你想要的数字都在一个范围内,这个方法是可行的。虽然不完全等同于“IN”函数,但你可能会发现它很有用。

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

0

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

if (new [] { 10, 11, 12 }.Contains(productTypeId))
{
    ...
}

0

var validIds = new[] { 10, 11, 12 };

validIds.Contains(productId);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接