1

我正在尝试使用 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;}
}

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

谁能帮我解决这个问题?

- - - - - 更新 - - - - -

这就是我想要完成的:

select Count(*)

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

1 回答 1

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 '%keyword%' 进行搜索时不需要 Int64 结果计数!;-)

于 2013-11-05T17:13:11.277 回答