2

EntityName と EntityIds を含む監査モデルがあります。

このテーブルから EntityRecord と関連エンティティを取得する動的クエリを作成する方法を探しています

これは私がこれまでに持っているものです

var auditRows = from a in context.Audit
                where (a.EntityName == entityName && a.EntityKey == entityKey);

私が取得したかったのは、エンティティ、たとえば「クラス」に関連するエンティティ「学生」があるかどうかです。where句を次のように作成する動的クエリを作成したい

where (a.EntityName == entityName && a.EntityKey == entityKey) ||
      (a.EntityName == "Students" && context.Students.Where(s => s.ClassID == entityKey)

関連エンティティを取得する方法を見つけました

var objectContext = ((IObjectContextAdapter)context).ObjectContext;
var container = objectContext.MetadataWorkspace.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace);
var relatedEntitySets = container.EntitySets.Where(es => es.ElementType.Name == entitySet).First().ElementType.NavigationProperties

しかし、クエリを作成する方法や、クエリを作成するためのより良い方法があるかどうかはわかりません。

4

1 に答える 1

0

WHERE を取り除き、ANY に置き換えるだけでよいと思います。

var students = context.GetTable<Students>();
// Repeat for other tables

where (a.EntityName == entityName && a.EntityKey == entityKey) ||
      (a.EntityName == "Students" && students.Any(s => s.ClassID == entityKey) ||
      (a.EntityName == "People" && people.Any(s => s.ClassID == entityKey) ||
      (a.EntityName == "FOO" && foo.Any(s => s.Bar == entityKey)

Any は、必要な WHERE EXISTS() を生成します。

于 2014-06-16T21:41:06.717 に答える