Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq NHibernate查询,WHERE条件成对_Linq_Nhibernate - Fatal编程技术网

Linq NHibernate查询,WHERE条件成对

Linq NHibernate查询,WHERE条件成对,linq,nhibernate,Linq,Nhibernate,我有一个NHibernate对象的集合ConcurrentBag,其属性为project\u id和name。我想从另一个表中创建一组不相关的(模式方面的)对象,这些对象也与这些属性匹配 我所期望的SQL类似于: SELECT * FROM table WHERE (project_id = 1 AND name = 'foo') OR (project_id = 2 AND name = 'foo') OR (project_id = 1 AND name = 'bar')

我有一个NHibernate对象的集合
ConcurrentBag
,其属性为
project\u id
name
。我想从另一个表中创建一组不相关的(模式方面的)对象,这些对象也与这些属性匹配

我所期望的SQL类似于:

SELECT * FROM table WHERE (project_id = 1 AND name = 'foo') 
    OR (project_id = 2 AND name = 'foo') 
    OR (project_id = 1 AND name = 'bar') 
    ... etc
WHERE子句中的值对基于
ConcurrentBag
中每个
事件的值


我不知道如何使用NHibernate(最好是使用LINQ)来查询这个问题。这可能吗?

我认为这对于LINQ来说很难,但是如果您使用QueryOver,那么使用
限制动态构建
WHERE
子句就很容易了。析取

var disjunction = Restrictions.Disjunction();

foreach (Event evt in events)
{
    disjunction.Add(Restrictions.Where<Table>(
        t => t.project_id == evt.project_id && t.name == evt.name);
}

var rows = session.QueryOver<Table>()
    .Where(disjunction)
    .List<Table>();
var disjunction=Restrictions.disjunction();
foreach(事件中的事件evt)
{
析取.Add(Restrictions.Where)(
t=>t.project\u id==evt.project\u id&&t.name==evt.name);
}
var rows=session.QueryOver()
.Where(析取)
.List();

如果值是字面确定的,但我不知道如何从值的
IEnumerable
中生成Where(…)过滤器。问题可能不清楚,我会更新。@AndySavage:Updated——使用QueryOver这可能比LINQ更容易。