我不知道如何将表连接到多对多关系并包含其他表,最后创建viewmodel。
最后我想拥有viewmodel:
public class InsurancePolicyItemViewModel : InsurancePolicyItem
{
public InsurancePolicyItemViewModel()
{
}
public InsurancePolicyItemViewModel(InsurancePolicyItem item)
{
//do something - supplement the basic information
}
public int InsurancePolicyItemId { get; set; }
public string Name { get; set; }
[...]
public IEnumerable<Customers> { get; set; }
public IEnumerable<InsurancePolicyItemInstallments> { get; set; }
}
请帮我创建linq查询。使用lambda表达式会很好吗?
现在我的查询看起来像:
var result = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible)
.Include(i => i.InsuranceCompany)
.Include(i => i.InsuranceCompanyPolicyStatus)
.Include(i => i.InsuranceCompanyPolicyType)
.Include(i => i.User_AddedBy)
.Include(i => i.User_ModifiedBy)
.Include(i => i.InsurancePolicyItemInstallment)
.Include(i => i.InsurancePolicyItemFile)
.Include(i => i.InsurancePolicyItemCustomers)
.Select(s => s).ToList();
但它返回不包含Customers表的InsurancePolicyItem。
我试过了:
var query = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible).Select(s => new InsurancePolicyItemViewModel(s) {
CustomerList = ????,
InstallmentList = s.InsurancePolicyItemInstallment
[...]
});
但我不知道如何使用Join和include
答案 0 :(得分:0)
为您提供一个连接不同表并在运行时创建新模型的示例
var persons = (
// taking Persons table as c
from c in context.Persons
// now taking PersonStatus table as x and making join
// with same key columns of x and c
join x in context.PersonStatus on c.TcKimlik equals x.Tckn
join h in hospitals on x.HospitalCode equals h.KURUM_KODU
where x.Statu == true
//create new model by taking data of different tables of join
select new DataViewModel
{
Id = c.Id,
TcKimlik = c.TcKimlik,
Uyruk = c.Uyruk,
Ad = c.Ad,
Soyad = c.Soyad,
Cinsiyet = c.Cinsiyet,
DogumTarihi = c.DogumTarihi,
KurumStatu = h.PAYDAS,
KurumKodu = h.KURUM_KODU,
KurumAdi = h.KURUM_ADI,
BranchName = c.Brans.BranchName,
AcademicTitleName = c.AkademikUnvan.Title,
ManagerialTitleName = c.IdariUnvan.Title,
StaffStatuName = c.Durum.Statu,
BranchTypeName = c.Unvan.Type,
ServiceClassName = c.Unvan.ServiceClass.Name,
City = h.KURUM_ILI,
CityCode = h.IL_KODU,
CityTownName = h.KURUM_ILCESI
}).AsQueryable();
我认为这有助于您解决问题
答案 1 :(得分:0)
我的解决方案基于您的代码:
var a = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible && w.ItemCreatedStatusId != Helpers.InsurancePolicyItemStatus.Draft)
.Select(s => new InsurancePolicyItemViewModel(s)
{
CustomerList = s.InsurancePolicyItemCustomers.Join(contex.Customers,
q => q.CustomersId,
c => c.CustomersId,
(q, c) => new
{
customerList = c
}).Select(ss => ss.customerList),
InstallmentList = s.InsurancePolicyItemInstallment,
FileList = s.InsurancePolicyItemFile,
});
但它返回错误
LINQ中仅支持无参数构造函数和初始值设定项 到实体
我发现了类似的问题:
Only parameterless constructors and initializers are supported in LINQ to Entities
但它不起作用...如果我创建匿名类型而不是InsurancePolicyItemViewModel,查询返回错误
无效的列名称'Discriminator'。