2015-02-12 2 views
1

У меня есть следующие два субъектовКак отобразить отношения между этими двумя сущностями

 public class Document 
    { 
      public int Id { get; set; } 
      public string Name { get; set; } 

      public virtual ICollection<UploadedFile> UploadedFiles{ get; set; } 
    } 

    public class UploadedFile 
    { 
     public int Id { get; set; } 
     public string FileName{get;set;} 
     public string EntityName {get;set;} 
     public string EntityId{get;set;} 
     public bool IsActive{get;set;} 
    } 

Теперь мое требование, я хочу, чтобы загрузить «Document.UploadedFiles» на основе следующего условия.

UploadedFile.EntityId=Document.Id && UploadedFile.IsActive==true && UploadedFile.EntityName="Document" 

Как я могу сопоставить отношения для свойства навигации UploadedFiles ??

ответ

2

Например, вы можете использовать LINQ и метод справки для условия соответствия:

bool IsTargetFile(UploadedFile file, int documentId) 
{ 
    bool isTargetId = file.EntityId == documentId; 
    bool isTargetName = file.EntityName == "Document"; 
    bool isActive = file.IsActive; 
    return isTargetId && isTargetName && isActive; 
} 
void Main() 
{ 
    var document = new Document { Id = 1, Name = "MyDocument" }; 
    var targetFile1 = new UploadedFile { EntityId = 1, EntityName = "Document", IsActive = true }; 
    var nonTargetFile1 = new UploadedFile { EntityId = 2, EntityName = "Document", IsActive = true }; 
    var nonTargetFile2 = new UploadedFile { EntityId = 1, EntityName = "WrongDocument", IsActive = true }; 
    var nonTargetFile3 = new UploadedFile { EntityId = 1, EntityName = "Document", IsActive = false }; 
    document.UploadedFiles = new List<UploadedFile> 
    { 
     targetFile1, nonTargetFile1, nonTargetFile2, nonTargetFile3 
    }; 
    var targetFiles = document.UploadedFiles.Where(file => IsTargetFile(file, document.Id)); 
    foreach (var file in targetFiles) 
     Console.WriteLine("{0} {1} {2}", file.EntityId, file.EntityName, file.IsActive); 
} 

Помощь классы:

public class Document 
{ 
    public int Id { get; set; } 
    public string Name { get; set; }  
    public virtual ICollection<UploadedFile> UploadedFiles { get; set; } 
} 

public class UploadedFile 
{ 
    public int Id { get; set; } 
    public string FileName { get; set; } 
    public string EntityName { get; set; } 
    public int EntityId { get; set; } 
    public bool IsActive { get; set; } 
} 
+0

Это значит, document.UploadedФайлы имеют все записи, а не ТОЛЬКО те, которые соответствуют указанному мне состоянию. Ваш ответ подобен загрузке всех записей из UploadedFile, а затем их повторной фильтрации. Это не то, что я ищу. –

0

Поскольку не существует связь/б таблиц. Таким образом, вы можете использовать следующий метод.

Сначала вы найдете все UploadedFile, где он находится .EntityId = Document.Id, как показано ниже.

UploadedFile tempRes = db.UploadedFile.where(r=>r.EntityId==Document.Id).select(); 

затем выберите точный результат запроса по temRes.

UploadedFile Res=tempRes.where(your rest condition). 
Смежные вопросы