Reputation: 11
I have the following two entities
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;}
}
Now my requirement is I want to load "Document.UploadedFiles" based on the following condition.
UploadedFile.EntityId=Document.Id && UploadedFile.IsActive==true && UploadedFile.EntityName="Document"
How can I map the relationship for the UploadedFiles navigation property??
Upvotes: 1
Views: 77
Reputation: 1
Because there is no Relation b/w tables. So you can go through with following method.
First you find the all UploadedFile where it is .EntityId=Document.Id as below.
UploadedFile tempRes = db.UploadedFile.where(r=>r.EntityId==Document.Id).select();
then select exact result querying on temRes.
UploadedFile Res=tempRes.where(your rest condition).
Upvotes: 0
Reputation: 19021
For example, you can use LINQ and a help method for the match condition:
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);
}
Help classes:
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; }
}
Upvotes: 2