반응형
SQL IN 연산자에 해당하는 linq는 무엇입니까?
linq를 사용하면 행 값이 배열에 있는지 확인해야합니다.
SQL 쿼리와 동일합니다.
WHERE ID IN (2,3,4,5)
내가 어떻게 해?
. 포함
var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x
물론 간단한 문제로 다음과 같은 문제가 발생할 수 있습니다.
var resultset = from x in collection where x >= 2 && x <= 5 select x
IEnumerable.Contains () 를 사용하여 SQL IN과 동일한 작업을 수행합니다 .
var idlist = new int[] { 2, 3, 4, 5 };
var result = from x in source
where idlist.Contains(x.Id)
select x;
db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x));
또는
from x in db.SomeTable
where new[] {2,3,4,5}.Contains(x)
Intersect 및 Except는 좀 더 간결하며 아마도 조금 더 빠를 것입니다.
에
collection.Intersect(new[] {2,3,4,5});
안
collection.Except(new[] {2,3,4,5});
또는
IN에 대한 메서드 구문
collection.Where(x => new[] {2,3,4,5}.Contains(x));
안
collection.Where(x => !(new[] {2,3,4,5}.Contains(x)));
IEnumerable<T>.Contains(T)
문은 당신이 찾고있는 무엇을해야한다.
.Contains ()를 사용하는 매우 기본적인 예제
List<int> list = new List<int>();
for (int k = 1; k < 10; k++)
{
list.Add(k);
}
int[] conditionList = new int[]{2,3,4};
var a = (from test in list
where conditionList.Contains(test)
select test);
도움말 방법을 작성할 수 있습니다.
public bool Contains(int x, params int[] set) {
return set.Contains(x);
}
짧은 코드를 사용하십시오.
var resultset = from x in collection
where Contains(x, 2, 3, 4, 5)
select x;
다음은 값 목록 내에서 값을 검색하는 데 사용할 수있는 일반 확장 방법입니다.
public static bool In<T>(this T searchValue, params T[] valuesToSearch)
{
if (valuesToSearch == null)
return false;
for (int i = 0; i < valuesToSearch.Length; i++)
if (searchValue.Equals(valuesToSearch[i]))
return true;
return false;
}
다음과 같이 사용할 수 있습니다.
int i = 5;
i.In(45, 44, 5, 234); // Returns true
string s = "test";
s.In("aa", "b", "c"); // Returns false
이것은 조건문에서 편리합니다.
위의 상황은 Contains
함수가 프리미티브에 대해 사용될 때 작동 하지만 객체를 다루는 경우 (예 :) myListOrArrayOfObjs.Contains(efObj)
?
해결책을 찾았습니다! 각 필드에 대해로 구분 된 efObj
으로 변환하십시오 (거의 obj의 CSV 표현으로 생각할 수 있음).string
_
이러한 예는 다음과 같습니다.
var reqAssetsDataStringRep = new List<string>();
foreach (var ra in onDemandQueueJobRequest.RequestedAssets)
{
reqAssetsDataStringRep.Add(ra.RequestedAssetId + "_" + ra.ImageId);
}
var requestedAssets = await (from reqAsset in DbContext.RequestedAssets
join image in DbContext.Images on reqAsset.ImageId equals image.Id
where reqAssetsDataStringRep.Contains(reqAsset.Id + "_" + image.Id)
select reqAsset
).ToListAsync();
참조 URL : https://stackoverflow.com/questions/2334327/what-is-the-linq-equivalent-to-the-sql-in-operator
반응형
'IT이야기' 카테고리의 다른 글
SELECT 문에서 BOOLEAN 유형을 사용하는 방법 (0) | 2021.04.08 |
---|---|
std :: string 구현 (0) | 2021.04.08 |
ASP.NET MVC3의 부분보기에서 ViewBag에 액세스 할 수 없습니다. (0) | 2021.04.08 |
DbContext 스레드는 안전할까? (0) | 2021.04.08 |
URL을 일반 Windows 파일 이름 Java로 변환 (0) | 2021.04.08 |