如果表之间的关系是多对多的,如何在Entity Fraemwork中获得交集?

时间:2016-04-02 17:26:49

标签: c# entity-framework linq entity-framework-6 many-to-many

我有这个模型(模型更多,但现在并不重要)

enter image description here

我有一些注释,我想让所有用户如何使用这些注释,但我得到了这个例外("无法创建类型' DataBase.Annotation'的常量值。  在此上下文中仅支持原始类型或枚举类型。"),使用下一个代码时

TextCorporaEntities TextCorporaContext = new TextCorporaEntities();
List<DataBase.Annotation> annotations = //annotations which I used  
//I get the exception here
var UserAnnotationsResult = TextCorporaContext.Annotation_User.
        Where(x => annotations.
            Contains(x.Annotation));

我可以使用此代码,但效率不高

List<Annotation_User> listResult = new List<Annotation_User>(); 
foreach (var x in annotations)
{
    listResult.Concat(TextCorporaContext.Annotation_User.Where(y=>y.AnnotationId == x.Id));
}

如何获取使用某些注释的所有用户? 如何让所有使用AccessType等于ReadOrWrite的注释的用户(在模型中保存为字符串)?

1 个答案:

答案 0 :(得分:3)

您只能使用包含原语

我认为这应该有用

var annotationsIds = annotations.Select(a => a.AnnotationId)
var UserAnnotationsResult = TextCorporaContext.Annotation_User.
    Where(x => annotationsIds.
        Contains(x.Annotation.AnnotationId));