查询现有数据时修复错误

时间:2017-12-05 04:21:58

标签: linq many-to-many

我正在尝试确定变量是否已存在,因此我不会创建重复项。但我不断收到错误:

无法从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 个答案:

答案 0 :(得分: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();