C# 可以在C和LINQ Lambda表达式中使用“in”类型语句吗?

C# 可以在C和LINQ Lambda表达式中使用“in”类型语句吗?,c#,linq,c#-4.0,C#,Linq,C# 4.0,我需要不时比较一些值,如: if (myCurrentUser.Role in ("Admin","User")) 但上述情况似乎不可能实现,相反,我们需要做到: if (myCurrentUser.Role == "Admin" || myCurrentUser.Role == "User") 开始变得很长了 那么,有没有一种方法可以让你有一个内在的方法呢。显然,在SQL中可以做到这一点 我还想在LINQ Lambda表达式中使用它 var myRecords = db.mytable.w

我需要不时比较一些值,如:

if (myCurrentUser.Role in ("Admin","User"))
但上述情况似乎不可能实现,相反,我们需要做到:

if (myCurrentUser.Role == "Admin" || myCurrentUser.Role == "User")
开始变得很长了

那么,有没有一种方法可以让你有一个内在的方法呢。显然,在SQL中可以做到这一点

我还想在LINQ Lambda表达式中使用它

var myRecords = db.mytable.where(r=>r.name in ("Roy","Jack"))
目前,我将其写成:

var myRecords = db.mytable.where(r=>((r.name == "Roy")||(r.name == "Jack")));
提前谢谢。

您可以用Contains完成。试试这个:

var names = new List<string>() { "Roy", "Jack" };
db.mytable.Where(r => names.Contains(r.name));
你可以用它来做。试试这个:

var names = new List<string>() { "Roy", "Jack" };
db.mytable.Where(r => names.Contains(r.name));

尝试使用contains,例如:

var x = (new string[] {"A", "B"}).Contains("C");

尝试使用contains,例如:

var x = (new string[] {"A", "B"}).Contains("C");

如果添加此扩展方法:

public static class Extensions
{
    public static bool IsIn<T>(this T source, params T[] values)
    {
        return values.Contains(source);
    }
}

如果添加此扩展方法:

public static class Extensions
{
    public static bool IsIn<T>(this T source, params T[] values)
    {
        return values.Contains(source);
    }
}

如果新的[]{Admin,User}.ContainsmyCurrentUser.role如果新的[]{Admin,User}.ContainsmyCurrentUser.role你怎么敢偷我的照片+你怎么敢偷我的照片+1括号是多余的,不是吗?是的,的确如此。这可能也是我的坏习惯——我喜欢让事情变得更明确、更易懂——括号是多余的,不是吗?是的,的确如此。这可能也是我的坏习惯——我喜欢把事情说得明白易懂