簡體   English   中英

使用linq進行動態查詢

[英]Dynamic query using linq

我有一個包含EntityName和EntityIds的審核模型。

我正在尋找一種創建動態查詢的方法,該方法將從該表中檢索EntityRecord和相關實體

這就是我到目前為止

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

我想得到的是,如果一個實體(例如“ Class”)具有相關的實體“ Students”。 我想創建一個動態查詢,將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

但我不知道如何構建查詢或是否有更好的方法來創建查詢。

我認為您只需要擺脫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)

任何都將生成所需的WHERE EXISTS()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM