큰 질문이 하나 있습니다.
간단히 다음과 같이 표시하는 linq 쿼리가 있습니다.
from xx in table
where xx.uid.ToString().Contains(string[])
select xx
string[]
배열 의 값은 (1,45,20,10, etc …)와 같은 숫자입니다.
의 기본값은 .Contains
입니다 .Contains(string)
.
대신이 작업이 필요합니다. .Contains(string[])
…
편집 : 한 사용자가 string[]
. 방법을 배우고 싶지만 올바른 방향으로 나를 가리키는 사람이 있습니까?
편집 : uid도 숫자가 될 것입니다. 이것이 문자열로 변환되는 이유입니다.
누구 도와?
답변
spoulson 거의 바로 그것을 가지고 있지만, 당신은 만들어야 List<string>
에서 string[]
첫번째. 실제로 List<int>
uid가이면 a 가 더 좋습니다 int
. List<T>
지원합니다 Contains()
. 이렇게 uid.ToString().Contains(string[])
문자열로 UID가 문자열로 배열의 값이 모두 포함되어 있음을 암시 ??? 확장 방법을 작성했다고해도 그 의미는 틀릴 것입니다.
[편집하다]
string[]
Mitch Wheat가 설명 하는 대로 변경하여 작성하지 않는 한 변환 단계를 건너 뛸 수 있습니다.
[종료]
확장 메서드를 사용하지 않는 경우 원하는 것은 다음과 같습니다 (이미 int로 잠재적 uid 컬렉션이있는 경우가 아니면 List<int>()
대신 사용하십시오). 이것은 내가 더 깔끔하다고 생각하는 체인 메서드 구문을 사용하며 더 많은 공급자와 쿼리를 사용할 수 있도록 int로 변환합니다.
var uids = arrayofuids.Select(id => int.Parse(id)).ToList();
var selected = table.Where(t => uids.Contains(t.uid));
답변
Contains 를 복제 하고 싶지만 배열의 경우 사용할 확장 메서드 와 샘플 코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ContainsAnyThingy
{
class Program
{
static void Main(string[] args)
{
string testValue = "123345789";
//will print true
Console.WriteLine(testValue.ContainsAny("123", "987", "554"));
//but so will this also print true
Console.WriteLine(testValue.ContainsAny("1", "987", "554"));
Console.ReadKey();
}
}
public static class StringExtensions
{
public static bool ContainsAny(this string str, params string[] values)
{
if (!string.IsNullOrEmpty(str) || values.Length > 0)
{
foreach (string value in values)
{
if(str.Contains(value))
return true;
}
}
return false;
}
}
}
답변
다음을 시도하십시오.
string input = "someString";
string[] toSearchFor = GetSearchStrings();
var containsAll = toSearchFor.All(x => input.Contains(x));
답변
.NET 4.0의 LINQ에는 또 다른 옵션이 있습니다. .Any () 메서드;
string[] values = new[] { "1", "2", "3" };
string data = "some string 1";
bool containsAny = values.Any(data.Contains);
답변
또는 이미 목록에 데이터가 있고 다른 Linq 형식을 선호하는 경우 🙂
List<string> uids = new List<string>(){"1", "45", "20", "10"};
List<user> table = GetDataFromSomewhere();
List<user> newTable = table.Where(xx => uids.Contains(xx.uid)).ToList();
답변
어때 :
from xx in table
where stringarray.Contains(xx.uid.ToString())
select xx
답변
이것은 확장 메서드를 작성하는 한 가지 방법의 예입니다 (참고 : 매우 큰 배열에는 사용하지 않을 것입니다. 다른 데이터 구조가 더 적절할 것입니다 …).
namespace StringExtensionMethods
{
public static class StringExtension
{
public static bool Contains(this string[] stringarray, string pat)
{
bool result = false;
foreach (string s in stringarray)
{
if (s == pat)
{
result = true;
break;
}
}
return result;
}
}
}