应用限制和预测的标准会计算不同的结果

时间:2013-11-05 12:23:05

标签: linq asp.net-mvc-4 nhibernate count distinct

我正在尝试使用Criteria执行以下功能,但是它给了我一个运行时错误,指示SQL中的错误。

 var query = session.CreateCriteria<TableName>()
                       .Add(Restrictions.Disjunction()
                            .Add(Restrictions.InsensitiveLike("Property1", keyword, MatchMode.Anywhere))
                            .Add(Restrictions.InsensitiveLike("Property2", keyword, MatchMode.Anywhere)));

query.SetProjection(Projections.Count(Projections.Distinct(
                                    Projections.ProjectionList()
                                    .Add(Projections.Property("Property1"))
                                    .Add(Projections.Property("Property3"))
                                    )));

表格映射如下所示:

public class TableName
{
     public int Property1 {get;set;}
     public int Property2 {get;set;}
     public int Property3 {get;set;}
     public int Property4 {get;set;}
}

我需要根据我的预测计算不同的结果,我不想将结果统计为整行!

有人可以帮我解决这个问题吗?

---------- ---------- UPDATE

这就是我想要完成的事情:

select Count(*)

from 
(
    select distinct Property1 , Property2 
    from tableName
    where Property1 like '%t%' or Property3 like '%t%'
) As x

1 个答案:

答案 0 :(得分:0)

您的标准,如果它们可能被翻译,将产生如下的SQL:

SELECT count(DISTINCT Property1, Property3) 
FROM TableName 
WHERE Property1 LIKE '%keyword%' OR Property2 LIKE '%keyword%'

哪个不行。使用

Projections.RowCount()  or  Projections.RowCountInt64()

表示COUNT(*)等价物。 可能,GROUP BY子句是有意义的(而不是DISTINCT)。 (我希望您在使用LIKE&#39;%keyword%&#39;!; - )进行搜索时不需要Int64结果计数