所以我得到了一个流畅的nHibernate表,如下所示:
public class AnsweredQuestionDb
{
public virtual long Id { get; set; }
public virtual QuestionDb Question { get; set; }
public virtual AnswerDb Answer { get; set; }
}
QuestionDb和AnswerDb是另外两个流畅的nHibernate表。
所以我想选择答案最少的问题。因此,如果问题A被分析了3次,问题B,C和D回答了4次,那么结果应该是问题A。
这就是我实际使用的观点:
var leastAnswerdQuestion = (from t in m_dbSession.Query<AnsweredQuestionDb>()
group t.Id by t.Question into groups
select groups.ToList().Sum()).ToList()[0];
但这抛出了一个异常,并且内部没有或order by。这能在一个查询中完成吗?
我希望我想做的事情已经很清楚了。
我假设在sql中,这将如下所示:
SELECT Question_id, count(Question_id)
FROM AnsweredQuestionDb
GROUP BY Question_id
ORDER By count(Question_id)
发布于 2021-02-04 02:12:42
因此,在Svyatoslav Danyliv的帮助下,我创建了这个:
当然,这不是完美的,但它可以满足钱包的需求:
QuestionDb nextQuestion = null;
var grouped = (from t in m_dbSession.Query<AnsweredQuestionDb>()
group t by t.Question.Id into g
orderby g.Count()
select new
{
QuestionId = g.Key,
Count = g.Count()
}).ToList();
var keys = grouped.Select(o => o.QuestionId).ToList();
var notAnswered = (from t in m_dbSession.Query<QuestionDb>()
where
!keys.Contains(t.Id)
select t).ToList().First();
if (notAnswered != null)
{
nextQuestion = notAnswered;
}
else
{
if (grouped.Count() == 0)
{
nextQuestion = (from t in m_dbSession.Query<QuestionDb>()
select t).ToList().First();
}
else
{
var leastAnsweredId = grouped
.OrderBy(x => x.Count)
.Select(x => x.QuestionId)
.FirstOrDefault();
nextQuestion = (from t in m_dbSession.Query<QuestionDb>()
where t.Id == leastAnsweredId
select t).ToList().FirstOrDefault();
}
}
发布于 2021-02-03 06:06:59
因此,将LINQ查询编写为SQL:
var grouped =
from t in m_dbSession.Query<AnsweredQuestionDb>()
group t by t.Question.Id into g
select new
{
QuestionId = g.Key,
Count = g.Count()
};
var leastAnsweredId = grouped
.OrderBy(x => x.Count)
.Select(x => x.QuestionId)
.FirstOrDefault();
https://stackoverflow.com/questions/66017342
复制相似问题