2015-02-12 83 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.UploadedFiles有所有的记录,不仅仅是满足我提到的条件。你的答案就像是加载UploadedFile中的所有记录,然后再次过滤它们。这不是我要找的。 – 2015-02-12 06:28:51

0

因为没有关联的B/W表。所以你可以通过以下方法来完成。

首先找到所有的UploadedFile,它是.EntityId = Document.Id,如下所示。

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

然后在temRes上选择精确的结果查询。

UploadedFile Res=tempRes.where(your rest condition).