C # IN 연산자가 있습니까?
SQL에서 다음 구문을 사용할 수 있습니다.
SELECT *
FROM MY_TABLE
WHERE VALUE_1 IN (1, 2, 3)
C #에 상응하는 것이 있습니까? IDE는 "in"을 키워드로 인식하는 것 같지만 그것에 대한 정보를 찾을 수없는 것 같습니다.
따라서 다음과 같은 작업을 수행 할 수 있습니까?
int myValue = 1;
if (myValue in (1, 2, 3))
// Do something
대신에
int myValue = 1;
if (myValue == 1 || myValue == 2 || myValue == 3)
// Do something
.In을 작성하고 싶다면 그렇게 할 수있는 확장을 만들 수 있습니다.
static class Extensions
{
public static bool In<T>(this T item, params T[] items)
{
if (items == null)
throw new ArgumentNullException("items");
return items.Contains(item);
}
}
class Program
{
static void Main()
{
int myValue = 1;
if (myValue.In(1, 2, 3))
// Do Somthing...
string ds = "Bob";
if (ds.In("andy", "joel", "matt"))
// Do Someting...
}
}
List.Contains()
나는 당신이 찾고있는 것을 생각합니다. C #은이 in
keyword
아니라 operator
당신이 SQL에서 참조하는지 다음 완전히 다른 목적을 제공하는합니다.
in
C #에서 키워드를 사용하는 방법에는 두 가지가 있습니다 . C #에 string [] 또는 List가 있다고 가정합니다.
string[] names; //assume there are some names;
//find all names that start with "a"
var results = from str in names
where str.StartsWith("a")
select str;
//iterate through all names in results and print
foreach (string name in results)
{
Console.WriteLine(name);
}
편집 내용을 참조하면 필요한 작업을 수행하기 위해이 방법으로 코드를 입력합니다.
int myValue = 1;
List<int> checkValues = new List<int> { 1, 2, 3 };
if (checkValues.Contains(myValue))
// Do something
다음과 같이 할 수 있습니다.
var x = 99; // searched value
if (new[] {1,2,3,99}.Contains(x))
{
// do something
}
일반적으로 Contains
수집 방법을 사용합니다 .
myCollection.Where(p => Enumerable.Range(1,3).Contains(p));
도움이되기를 바랍니다.
C #에는 "in"연산자가 없습니다. "in"키워드는 "foreach (... in ...)"또는 "from ... in ..."에만 사용됩니다.
SQL 쿼리에 해당하는 LINQ는 다음과 같습니다.
List<int> list = new List<int> { 1, 2, 3 };
var query = from row in my_table
where list.Contains(row.value1)
select row;
중복 : LINQ to SQL in and not in
select * from table where fieldname in ('val1', 'val2')
또는
select * from table where fieldname not in (1, 2)
LINQ to SQL의 IN 및 NOT IN 쿼리에 해당하는 것은 다음과 같습니다.
List<string> validValues = new List<string>() { "val1", "val2"};
var qry = from item in dataContext.TableName
where validValues.Contains(item.FieldName)
select item;
이:
List<int> validValues = new List<int>() { 1, 2};
var qry = from item in dataContext.TableName
where !validValues.Contains(item.FieldName)
select item;
In 연산자를 구현하는 가장 좋은 방법은 확장 메서드를 사용하는 것에 동의합니다. 나는 그것을 조금 다르게했다.
public static bool In(this string str, string CommaDelimintedStringSet)
{
string[] Values = CommaDelimintedStringSet.Split(new char[] { ',' });
foreach (string V in Values)
{
if (str == V)
return true;
}
return false;
}
차이점은 각 값 주위에 따옴표를 넣을 필요가없고 쉼표로 구분 된 값의 전체 집합 만 입력 할 수 있다는 것입니다.
bool result = MyString.In("Val1,Val2,Val3");
확장을 작성할 수 있습니다. 나는 한 번 전에 코드를 작성하기 위해 작성했습니다.
if(someObject.stringPropertyX.Equals("abc") || someObject.stringPropertyX.Equals("def") || ....){
//do something
...
}else{
//do something other...
....
}
확장명으로 더 읽기 쉬웠습니다.
if(someObject.stringPropertyX.In("abc", "def",...,"xyz"){
//do something
...
}else{
//do something other...
....
}
코드 는 다음과 같습니다 .
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Some.Namespace.Extenders
{
public static class StringExtender
{
/// <summary>
/// Evaluates whether the String is contained in AT LEAST one of the passed values (i.e. similar to the "in" SQL clause)
/// </summary>
/// <param name="thisString"></param>
/// <param name="values">list of strings used for comparison</param>
/// <returns><c>true</c> if the string is contained in AT LEAST one of the passed values</returns>
public static bool In(this String thisString, params string[] values)
{
foreach (string val in values)
{
if (thisString.Equals(val, StringComparison.InvariantCultureIgnoreCase))
return true;
}
return false; //no occurence found
}
}
}
This is the one specific to my needs at that time, but you may adapt and modify it to match more different types.
For digits from 0 to 9:
"123".Contains(myValue)
For any other Stuff:
"|1|2|3|".Contains("|" + myValue + "|")
For your updated question, you could also use a switch-statement.
switch (myvalue)
{
case 1:
case 2:
case 3:
// your code goes here
break;
}
There is no in operator that looks for a value in a collection, instead it's a method of the collection, called Contains
.
The most scalable solution is to use a HashSet
as the collection. Checking for a value in a HashSet
is close to an O(1) operation, compared to doing it in a List
where it is an O(n) operation. That means that you can pack a lot of values in a HashSet
and it's still fast, while looking for a value in a List
gets slower the more values you have.
Example:
var set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
var result = items.Select(i => set.Contains(i.value));
Common, LINQ way more powerful:
var list = new List<string> { "Tomato", "Orange", "Mango"};
var query = from i in my_table
from v in list
where i.Name.StartsWith(v)
select i;
The in
keyword in C# is for the foreach
statement and for LINQ query expressions. There is no functionality equivalent to SQL's in
operator in C# per se, but LINQ offers similar functionality with Contains()
.
var list = {1, 2, 3}
var filtered = (
from item in items
where list.Contains(item)
select item).ToArray().
참고URL : https://stackoverflow.com/questions/3164998/is-there-a-c-sharp-in-operator
'Development Tip' 카테고리의 다른 글
기존 테이블에서 테이블 (구조) 생성 (0) | 2020.10.08 |
---|---|
Kotlin에서 인라인 함수를 언제 사용합니까? (0) | 2020.10.08 |
JavaScript / jQuery : 창에 포커스가 있는지 테스트 (0) | 2020.10.08 |
GitHub Wiki (gollum) 저장소에 이미지를 삽입 하시겠습니까? (0) | 2020.10.08 |
Firebug가 toFixed ()가 함수가 아니라고 말하는 이유는 무엇입니까? (0) | 2020.10.08 |