2017-12-05 3 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は、クエリhasnまだ結果が得られていないので、エラーが出ます。 yieldにするには、.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

関連する問題