C# 林克。加载相关元素
我有一个实体C# 林克。加载相关元素,c#,entity-framework,linq,many-to-many,C#,Entity Framework,Linq,Many To Many,我有一个实体合同,列表KindWorks和KindWorks public partial class Contracts { public Contracts() { ListKindWorks = new HashSet<ListKindWorks>(); } public int Id { get; set; } ... public virtual ICollection<ListKindWorks>
合同
,列表KindWorks
和KindWorks
public partial class Contracts
{
public Contracts()
{
ListKindWorks = new HashSet<ListKindWorks>();
}
public int Id { get; set; }
...
public virtual ICollection<ListKindWorks> ListKindWorks { get; set; }
}
public partial class ListKindWorks
{
public int IdContract { get; set; }
public int IdKindWork { get; set; }
public virtual Contracts IdContractNavigation { get; set; }
public virtual KindWorks IdKindWorkNavigation { get; set; }
}
public partial class KindWorks
{
public KindWorks()
{
ListKindWorks = new HashSet<ListKindWorks>();
}
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<ListKindWorks> ListKindWorks { get; set; }
}
公共部分类合同
{
公共合同()
{
ListKindWorks=新HashSet();
}
公共int Id{get;set;}
...
公共虚拟ICollection ListKindWorks{get;set;}
}
公共部分类工程
{
public int IdContract{get;set;}
公共int IdKindWork{get;set;}
公共虚拟合同IdContractNavigation{get;set;}
公共虚拟KindWorks IdKindWorkNavigation{get;set;}
}
公共部分类工程
{
公共工程()
{
ListKindWorks=新HashSet();
}
公共int Id{get;set;}
公共字符串标题{get;set;}
公共虚拟ICollection ListKindWorks{get;set;}
}
我想加载相关元素。类似这样的伪代码:
source = model.Contracts
.Select(c => new MyType
{
IdContract = c.Id,
KindWork = new List<Item>
{ Id = KindWorks.Id, Value = KindWorks.Title }
// or
// KindWork = c.ListKindWorks
// .Where(x => x.IdContract == c.Id)
// .Select(y => new Item
// { Id = y.IdKindWork, Value = y.IdKindWorkNavigation.Title })
...
})
.ToList();
public class Item
{
public int Id { get; set; }
public string Value { get; set; }
}
source=model.Contracts
.选择(c=>new MyType
{
IdContract=c.Id,
KindWork=新列表
{Id=KindWorks.Id,Value=KindWorks.Title}
//或
//KindWorks=c.ListKindWorks
//.其中(x=>x.IdContract==c.Id)
//.选择(y=>新项目
//{Id=y.IdKindWork,Value=y.IdKindWorkNavigation.Title})
...
})
.ToList();
公共类项目
{
公共int Id{get;set;}
公共字符串值{get;set;}
}
是否可以为每个
合同加载列表
?如果我了解您要查找的内容,我会在字典中为每个合同创建一个列表。下面是我的结果:
var contracts = new List<Contracts>
{
new Contracts { Id = 1 },
new Contracts { Id = 2 },
new Contracts { Id = 3 },
};
var listKindWorks = new List<ListKindWorks>
{
new ListKindWorks { IdContract = 1, IdKindWork = 1 },
new ListKindWorks { IdContract = 1, IdKindWork = 2 },
new ListKindWorks { IdContract = 2, IdKindWork = 2 },
new ListKindWorks { IdContract = 2, IdKindWork = 3 }
};
var kindWorks = new List<KindWorks>
{
new KindWorks { Id = 1, Title = "Title 1" },
new KindWorks { Id = 2, Title = "Title 2" },
new KindWorks { Id = 3, Title = "Title 3" },
};
Dictionary<Contracts, List<Item>> myDic = contracts.Select(
contract => contract).ToDictionary(
contract => contract,
contract => listKindWorks.Where(
listKindWork => listKindWork.IdContract.Equals(contract.Id))
.Select(listKindWork => new Item
{
Id = kindWorks.FirstOrDefault(kindWork => kindWork.Id.Equals(listKindWork.IdKindWork))?.Id?? listKindWork.IdKindWork,
Value = kindWorks.FirstOrDefault(kindWork => kindWork.Id.Equals(listKindWork.IdKindWork))?.Title?? "KindWork not found"
}).ToList());
IEnumerable KindWorks=c.ListKindWorks
.选择(y=>新项目
{
Id=y.IdKindWork,
Value=y.IdKindWorkNavigation.Title
})
IEnumerable Subject=c.ListSubjects
.选择(y=>新项目
{
Id=y.IdSubject,
值=y.IdSubjectNavigation.Title
})
Contract1 : Title1, Title2
Contract2 : Title2, Title3
Contract3 : Nothing
IEnumerable<Item> KindWork = c.ListKindWorks
.Select(y => new Item
{
Id = y.IdKindWork,
Value = y.IdKindWorkNavigation.Title
})
IEnumerable<Item> Subject = c.ListSubjects
.Select(y => new Item
{
Id = y.IdSubject,
Value = y.IdSubjectNavigation.Title
})