var idList = new int[1, 2, 3, 4, 5];
var userProfiles = _dataContext.UserProfile.Where(......);
나는 attaboy 고정된 여기서요. 내가 할 수 있는 이 을 사용하여 루프를 상술합니다. 하지만, d # 39 을 (를) '이 아니라 i& 못하며창조된 linq'.
'Map_layer ()' 에 사용할 수 있습니다. 이 때 조금 뒤로 하고, re 상행담관염이라고 느껴질 수 있는 '에서' 조항을 깔의 you& # 39 이 있지만, 그것을 어떻게해야합니다:
var userProfiles = _dataContext.UserProfile
.Where(t => idList.Contains(t.Id));
O (N 광장 () 및 솔루션을 통해 복잡한 스콘테인스 자와히리 있다. 간단한 스타인 훨씬 뛰어난 성능을 가지고 있어야 합니다 (O (N) 로 인해 닫으십시오 해싱). 따라서 올바른 코드:
_dataContext.UserProfile.Join(idList, up => up.ID, id => id, (up, id) => up);
그 결과, 이제 내 측정치입니다. 내가 100 과 100 000 000 우저프로피우스 생성할지 받고 있다. 당시 2 분 19 초 참가하십시오 32ms 및 자와히리 스콘테인스 함께 했다. 난 내 순결케 리누머이블 증명하기 위해 사용되는 이 테스트를 위한 성명을 발표했다. 대신 사용할 경우, 자와히리 리누머이블 목록 및 스콘테인스 적립율은 가속화합니다. 어쨌든 차이가 크다. 가장 빠른 자와히리 스콘테인스 는 > Set<;). 모든 복잡한 의존하기 위한 기본 콜티언스 이콩탱스트 Look at 이 게시물로의 linq 배우고 있습니다. 내 테스트 샘플링합니다 살펴보면 다음과 같습니다.
private static void Main(string[] args)
{
var userProfiles = GenerateUserProfiles();
var idList = GenerateIds();
var stopWatch = new Stopwatch();
stopWatch.Start();
userProfiles.Join(idList, up => up.ID, id => id, (up, id) => up).ToArray();
Console.WriteLine("Elapsed .Join time: {0}", stopWatch.Elapsed);
stopWatch.Restart();
userProfiles.Where(up => idList.Contains(up.ID)).ToArray();
Console.WriteLine("Elapsed .Where .Contains time: {0}", stopWatch.Elapsed);
Console.ReadLine();
}
private static IEnumerable<int> GenerateIds()
{
// var result = new List<int>();
for (int i = 100000; i > 0; i--)
{
yield return i;
}
}
private static IEnumerable<UserProfile> GenerateUserProfiles()
{
for (int i = 0; i < 100000; i++)
{
yield return new UserProfile {ID = i};
}
}
콘솔입니다 출력:
>. 스타인 소요 시간: 00:00:00.0322546
>. 스콘테인스 자와히리 소요 시간: 00:02:19.4072107
하지만 중요한 것은 한 , t forget 좋은 답변 아보 don& # 39 - 다른 결과를 제공합니다!
var idList = new int[1, 2, 2, 2, 2]; // same user is selected 4 times
var userProfiles = _dataContext.UserProfile.Where(e => idList.Contains(e)).ToList();
이 반환되므로 2) 에서 가장 DB (및 사용자 목록을 보면 필요한 경우 별도의 정렬할지 제대로 될 수 있습니다)
var priceListIDs = new int[1, 2, 2, 2, 2]; // user has bought 4 times item ID 2
var shoppingCart = _dataContext.ShoppingCart
.Join(priceListIDs, sc => sc.PriceListID, pli => pli, (sc, pli) => sc)
.ToList();
이 결과 반환되므로 5 DB. # 39, & # 39 를 사용하여 contains&. 이 경우 문제가 될 수 있다.
할 수 있습니다. 이거 드세요.
var idList = new int[1, 2, 3, 4, 5];
var userProfiles = _dataContext.UserProfile.Where(e => idList.Contains(e));