2017-12-05 8 views
0

변수가 이미 있는지 확인하려고하므로 복제본을 만들지 않습니다. 하지만 오류가 계속 :기존 데이터를 쿼리하는 동안 오류 수정

가 여기에 오류가 발생 코드의 System.Linq.IQueryable 변환 할 수 없습니다

public List<QuestionTag> ParseTags(string tags) 
{ 
    var tagList = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
    var questionTags = new List<QuestionTag>(); 
    var anyNewTags = false; 

foreach (var tag in tagList) 
{ 
    var tagExists = _context.Tags.Where(x => x.Name == tag); 
    if (tagExists == null) 
    { 
     var newTag = new QuestionTag() { Tag = new Tag() { Name = tag } }; 
     _context.QuestionTags.Add(newTag); 
     questionTags.Add(newTag); 

     anyNewTags = true; 
    } 
    else 
    { 
     questionTags.Add(tagExists); // ERROR OCCURS HERE 
    } 

} 
if (anyNewTags) _context.SaveChanges(); 
return questionTags; 

}

답변

1

당신 tagExists 쿼리 여태 결과는 아직 나오지 않았으므로 오류가 발생했습니다. 수율을 높이려면 .ToList(), First() 또는 FirstOrDefault()를 사용하십시오.

이 결과리스트에 가정하면, 다음 사용

questionTags.AddRange(tagExists.ToList()); 

는 하나의 객체에 결과를 가정하면, 다음 사용

questionTags.Add(tagExists.First()); 

====== 편집 ==== ===

질문 태그의 유형은 List<QuestionTag>이지만 tagExists을 추가하면 Tags입니다.

그래서이를 변경, 그

var tagExists = _context.Tags.Where(x => x.Name == tag).Select(x => new QuestionTag { Tag = new Tag { Name = x.Name} }).FirstOrDefault(); 
+0

없음 작동하지 않습니다. 여전히 같은 오류를 반환합니다. – AllocSystems

+1

자세한 내용을 추가했습니다. – Sunil

+0

도움을 많이 주셔서 감사합니다. 감사합니다. 약간의 오류가 남았습니다. var tagExists = _context.Tags.Where (x => x.Name == 태그) .Select (새 QuestionTag {Tag = 새 태그 {Name = ** x.Name **}}). FirstOrDefault(); ** 이름 x가 현재 컨텍스트에 없습니다 ** – AllocSystems