3

我有一个列表,我想写一个关于列表 ids 的查询包含特定的表 id。

我写这个并运行真实,但我想在同一个查询中写所有..

List<int> tempList=yetkiUygulamaList.Select(y => y.Id).ToList();
query = query.Where(x => tempList.Contains(x.Uygulama.Id));

错误查询

query = query.Where(x => yetkiUygulamaList.Select(y =>y.Id).ToList().Contains(x.Uygulama.Id));
4

3 回答 3

0

ToList() 通过执行查询来实现,之后 NHibernate 无法理解第一个查询应该作为子查询包含在内。

只需删除无用的 ToList():

IQueryable<int> tempList = yetkiUygulamaList.Select(y => y.Id);  // removed here
query = query.Where(x => tempList.Contains(x.Uygulama.Id));

上面的代码将生成一个 SQL 查询。如果你想把它全部放在一个 C# 代码行中,只需去掉中间变量:

query = query.Where(x => yetkiUygulamaList.Select(y => y.Id).Contains(x.Uygulama.Id));
于 2013-02-11T13:20:52.780 回答
0

这必须有效

query = query.Where(x => yetkiUygulamaList.Any(y=>y.Id == x.Uygulama.Id));
于 2013-02-11T13:28:23.570 回答
0

您可以执行join,它会更简单,更适合您的情况。

如果我理解,query是一个包含属性的类(我们称之为AObj)的“集合”,Uygulama并且该类Uygulama包含一个属性Id并且yetkiUygulamaList是一个“集合”Uygulama

//will return a IEnumerable<AObj>
IEnumerable<AObj> query = query.Join(yetkiUygulamaList, a => a.Uygulama.Id, u => u.Id, (a,u)=>a);
于 2013-02-11T13:33:52.463 回答