<!--[*a-zA-Z\r\n]*-->
кажется, что в блокноте ++ есть только несколько строк комментариев
Редактирование: небольшая ошибка: пробелы - проблема с этим. Вы можете попробовать <!--[\r\n]{1}[* a-zA-Z\r\n]*-->
Если вы хотите написать .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...
}
}
Я делаю что-то вроде этого:
var shippingAddress = checkoutContext.Addresses.Where(a => (new HashSet<AddressType> { AddressType.SHIPPING_ONLY, AddressType.BILLING_AND_SHIPPING }).Contains(a.AddressType) && a.Id == long.Parse(orderDto.ShippingAddressId)).FirstOrDefault();
Для вашего обновленного вопроса вы также можете использовать оператор-переключатель.
switch (myvalue)
{
case 1:
case 2:
case 3:
// your code goes here
break;
}
Обычно используется метод 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;
Ключевое слово в
в C # предназначено для инструкции foreach
и для выражений запросов LINQ. Функциональности, эквивалентной оператору в
SQL в C # как таковом, нет, но LINQ предлагает аналогичные функции с Contains ()
.
var list = {1, 2, 3}
var filtered = (
from item in items
where list.Contains(item)
select item).ToArray().
Дубликат: LINQ to SQL в
select * from table where fieldname in ('val1', 'val2')
или
select * from table where fieldname not in (1, 2)
, а не в
select * from table where fieldname in ('val1', 'val2')
или
select * from table where fieldname not in (1, 2)
Эквивалент запросов IN и NOT IN в LINQ to SQL будет примерно таким:
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, который ищет значение в коллекции, вместо этого это метод коллекции, называемый Contains
.
Наиболее масштабируемое решение - использовать HashSet
в качестве коллекции. Проверка значения в HashSet
близка к операции O (1) по сравнению с выполнением ее в List
, где это операция O (n). Это означает, что вы можете упаковать множество значений в HashSet
, и он все равно будет быстрым, а поиск значения в List
будет тем медленнее, чем больше у вас значений.
Пример:
var set = new HashSet<int>();
set.Add(1);
set.Add(2);
set.Add(3);
var result = items.Select(i => set.Contains(i.value));
List.Contains ()
- это, я думаю, то, что вы ищете. C # имеет в
ключевое слово
, а не оператор
, который служит совершенно другой цели, чем то, что вы имеете в виду в SQL.
Есть два способа использования в ключевом слове
в C #. Предположим, у вас есть строка [] или список в C #.
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
Вы можете написать расширение. Я написал однажды назад, чтобы сделать код вроде
if(someObject.stringPropertyX.Equals("abc") || someObject.stringPropertyX.Equals("def") || ....){
//do something
...
}else{
//do something other...
....
}
более читабельным с расширением s.t. можно было написать
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
}
}
}
Это тот, который специфичен для моих нужд в то время, но вы можете адаптировать и модифицировать его для соответствия большему количеству различных типов.