在我的模型中,我有一个属性是其他模型的组合。
public string PiramideId => (string.IsNullOrWhiteSpace(GEMEENTECODE) ? "" : GEMEENTECODE.Trim()) + "-" + (string.IsNullOrWhiteSpace(WIJKCODE) ? "" : WIJKCODE.Trim()) + "-" + (string.IsNullOrWhiteSpace(GROEPCODE) ? "" : GROEPCODE.Trim()) + "-" + (string.IsNullOrWhiteSpace(STRAATCODE) ? "" : STRAATCODE.Trim()) + "-" + (string.IsNullOrWhiteSpace(GEBOUWCODE) ? "" : GEBOUWCODE.Trim()) + "-" + (string.IsNullOrWhiteSpace(HUISNR) ? "" : HUISNR.Trim());
当我尝试对PiramideId
进行排序时,我在Entity Framework中进行调用时,EF返回一个错误,指出该列在数据库中不存在。有没有办法告诉EF,列PiramideId基本上是几种组合在一起的?
我在获取所有项目列表后尝试排序,即使这样做也不是我想要的,因为那时我必须在我的数据库中获取所有记录,而我只想要前30名。
查询示例:
PagedView.Context.PERSOON.Join(PagedView.Context.VERHURINGEN, persoon => persoon.ComputerNr,
verhuring => verhuring.PersoonsID, (persoon, verhuring) => new {persoon, verhuring})
.Join(PagedView.Context.EENHEID, @t => @t.verhuring.Eenheid, eenheid => eenheid.ComputerNr,
(@t, eenheid) => new PersoonDTO
{
ComputerNr = @t.persoon.ComputerNr,
FAMILIENAAM = @t.persoon.FAMILIENAAM,
VOORNAAM = @t.persoon.VOORNAAM,
NAAM = @t.persoon.NAAM,
ADRES = @t.persoon.ADRES,
Een = eenheid
}).OrderBy(p => p.Een.PiramideId).ToList();
答案 0 :(得分:1)
实体框架的工作原理是生成SQL语句,查询数据库,然后将结果映射到模型。在这种特殊情况下,它不能生成SQL语句,因为它不知道PiramideId是什么。你可以通过执行查询然后排序来解决这个问题。让它执行查询的最简单方法是使用AsEnumerable
。这给你
PagedView.Context.PERSOON
.Join(PagedView.Context.VERHURINGEN,
persoon => persoon.ComputerNr,
verhuring => verhuring.PersoonsID,
(persoon, verhuring) => new {persoon, verhuring})
.Join(PagedView.Context.EENHEID,
@t => @t.verhuring.Eenheid,
eenheid => eenheid.ComputerNr,
(@t, eenheid) => new PersoonDTO
{
ComputerNr = @t.persoon.ComputerNr,
FAMILIENAAM = @t.persoon.FAMILIENAAM,
VOORNAAM = @t.persoon.VOORNAAM,
NAAM = @t.persoon.NAAM,
ADRES = @t.persoon.ADRES,
Een = eenheid
})
.AsEnumerable()
.OrderBy(p => p.Een.PiramideId)
.ToList();