我有一个List,我想写一个关于List的id的查询包含特定的表id。
我写这个并运行true,但我想在同一个查询中写所有内容。。
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));
这必须适用于
query = query.Where(x => yetkiUygulamaList.Any(y=>y.Id == x.Uygulama.Id));
您可以执行联接,这将更简单,更适合您的情况。
如果我理解,query
是包含属性Uygulama
的类(我们称之为AObj
)的"集合",类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);
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));