Linq。所有项目都不在列表

时间:2018-05-25 21:36:56

标签: c# linq entity-framework-core

我有以下型号:

public class Category : Entity
{

    public int Value { get; set; }
    public List<CategoryTranslation> Translations { get; set; }
    public Category ParentCategory { get; set; }
    public bool AutoTranslate { get; set; }
}

public class CategoryTranslation : Entity
{
    public string Name { get; set; }
    public Category Category { get; set; }
    public Language Language { get; set; }
    public bool PrimaryTranslation { get; set; }
}

当用户发布新类别时,我想知道该帖子是否包含系统上所有可能的语言。目标是,如果POST没有我想要获得所有剩余的语言并使用翻译服务自动将它们翻译成数据库。

我有以下Linq声明:

var languages = context.Where<Language>(x => !model.Translations.Any(y => y.Language.Id == x.Id));

model中传递的数据是;

{

  "value": 0,
  "translations": [
    {
      "name": "string1",
      "languageId": 1,
      "primaryTranslation": true
    },
    {
      "name": "string2",
      "languageId": 2,
      "primaryTranslation": true
    }
  ]
}

我正在使用AutoMapper将此映射到Category类(这是正常工作并正确映射实体)来自调试。因此languageId已映射到CategoryTranslation.Language.Id。 (再次通过调试,我可以看到例如1被映射到model.Translations[0].Language.Id)。

现在系统在系统上有3种语言,所以我希望language变量具有未传递的单一剩余语言?

然而,当我收到错误时:

  

{System.NullReferenceException:对象引用未设置为对象的实例      在Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.GetPropertyValue(对象实体,IProperty属性)
     在Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.MemberAccessBindingExpressionVisitor.GetValue [T](QueryContext queryContext,Object entity,IProperty property)
     在lambda_method(Closure,CategoryTranslation)
     在System.Linq.Enumerable.WhereListIterator`1.MoveNext()
     在System.Linq.Enumerable.Any [TSource](IEnumerable`1 source)
     在lambda_method(闭包,语言)
     在System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
     在Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider。&lt; _TrackEntities&gt; d__17`2.MoveNext()
     在Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
     at System.Collections.Generic.List 1.AddEnumerable(IEnumerable\ 1 enumerable)
     在System.Linq.Enumerable.ToList [TSource](IEnumerable`1 source)
     在Bemfeito.Data.DataContext.Where [T](表达式1 predicate, Expression\ 1 []包括)

以下屏幕显示正在发送语言;

Screenshot Visual Studio

此外,如果我在观察窗口中尝试model.Translations.Any(y => y.Language.Id == 1),则不会抛出错误。

Watch statment

谁能告诉我哪里出错了?这可能是EntityFramework方面的一个问题吗?

0 个答案:

没有答案