我在Entity Framework中有一个父/子表,我需要根据子主键从父项中选择一行。
我写这些代码:
List<int> s = (from all in DB.TbProfiles
where all.TbMaharat.Any(c => maharat.Contains(c.MaharatId))
select all.ProfileId).ToList();
但我发现Linq2Entity不支持“Contains”,我必须使用“MultiSet”和ESQL命令。但我可以找到任何样本来做到这一点。
我这样编写ESQL但它不起作用:
byte[] moshTypes = new byte[] { 1, 2, 3 };
List<int> s = DB.TbProfiles.Where("it.TbMaharat exists(Select 0 from TbMaharat as e where e.MaharatId IN MultiSet (" + string.Join(",", moshTypes) + "))")
.Select(c=>c.ProfileId).ToList();
return s;
任何人都可以帮助我吗?
答案 0 :(得分:0)
要使用IEnumerable<T>.Contains()
方法,您必须使用ToList()
或ToArray()
将表格加载到内存中。然而,这可能会导致巨大的内存成本,所以除非桌子非常小并且不会及时增长,否则就不要这样做。
Contains
方法有一种解决方法:为每个值构建OR
表达式,以便Contains()
方法变为DB.TbMaharat.Where(x=>x.MaharatId == 1 || x.MaharatId == 2 || x.MaharatId == 3)
。请参阅MSDN主题,了解如何执行此操作:http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/095745fe-dcf0-4142-b684-b7e4a1ab59f0/。