2012-01-22 2 views
4

임 데이터베이스에서 태그를 얻습니다.Linq는 배열로 교차합니다.

테이블은 열 ID 및 태그 이름

내가 문자열 목록 얻기 위해 이런 일을하고 있어요 있습니다 문자열을 얻기 위해 다음

var taglist = Model.Tags.Select(x => x.TagName.ToLower()).ToArray(); 

내가 다른 문자열 배열에 대해 비교하고 있습니다를 그 다음 두 경우 모두 발생합니다 :

var intersectList = tagList.Intersect(anotherList); 

내 목록이 있지만 이제는 tagList에 해당하는 교차 목록에 남아있는 각 항목의 ID도 원합니다. (int 배열이 될 수 있음)

아무에게도 좋은 방법이 도움이 될 수 있습니까?

답변

6

intersect를 사용하지 마십시오. 동일한 유형의 콜렉션에서만 작동합니다. 간단한 조인 또는 다른 형태의 필터링을 수행 할 수 있습니다. 문자열 목록을 HashSet에 넣고 해당 집합에 TagName을 포함하는 태그로 필터링하는 것이 가장 쉽습니다. 이렇게하면 태그를 투영하지 않고 유지하여 ID 및 기타 속성을 유지할 수 있습니다.

var stringSet = new HashSet<string>(anotherList); 
var tagList = Model.Tags.Where(t => stringSet.Contains(t.TagName)).ToList(); 

목록에 넣으십시오. 특별히 배열을 필요로하지 않는 한 배열에 배열을 던지지 마십시오 (배열이 필요한 메서드에서 사용하기 위해).

0

Array 대신 Dictionary<int, string>을 사용할 수 있습니까?

0

당신은 할 수 :

var intersectIds = Model.Tags 
    .Where(tag => anotherList.Contains(tag.TagName)) 
    .Select(tag => tag.Id) 
    .ToList();