流畅的 NHibernate 自定义 SQL 查询

发布于 2024-10-19 18:22:49 字数 457 浏览 1 评论 0原文

我是 NHibernate 和 FNH 的新手。我正在尝试在单个查询中查询多个可能的对象,但我不确定最有效的查询是什么。我有一本单词词典:

public class Word
{
   public virtual int Id { get; set; }
   public virtual string Text { get; set; }
}

我想查询列表中包含的所有 Word 对象。我的 SQL 是:

SELECT (*) FROM dbo.Word WHERE Text LIKE 'word1%' OR Text LIKE 'word2%' ...

现在我只是获取单词列表并生成 SQL 查询的 WHERE 子句。我创建了一个 ISQLQuery 但我不确定如何执行它并获取 Word 对象的集合。

I'm new to NHibernate and FNH. I'm trying to query for multiple possible objects in a single query and I am not sure what the most efficient query is. I have a dictionary of words:

public class Word
{
   public virtual int Id { get; set; }
   public virtual string Text { get; set; }
}

And I want to query for all Word objects that are contained in a list. The SQL I have is:

SELECT (*) FROM dbo.Word WHERE Text LIKE 'word1%' OR Text LIKE 'word2%' ...

Right now I'm just getting the list of words and generating the WHERE clause of the SQL query. I've created an ISQLQuery but I'm not sure how to execute it and get back a collection of Word objects.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把回忆走一遍 2024-10-26 18:22:49

既然您正在使用 NHibernate,为什么不使用为您提供的工具,而不是编写可能容易发生 SQL 注入的自定义 SQL。

public IList<Word> GetWords(IList<string> filters)
{
    var criteria = Session.CreateCriteria<Word>();
    var disjunction = Restrictions.Disjunction();
    foreach (var filter in filters)
    {
        disjunction.Add(Restrictions.Like("Text", filter, MatchMode.Start));
    }
    criteria.Add(disjunction);

    return criteria.List<Word>();
}

Since you're using NHibernate why not use the facilities provided for you rather than writing custom SQL that is likely prone to SQL injection.

public IList<Word> GetWords(IList<string> filters)
{
    var criteria = Session.CreateCriteria<Word>();
    var disjunction = Restrictions.Disjunction();
    foreach (var filter in filters)
    {
        disjunction.Add(Restrictions.Like("Text", filter, MatchMode.Start));
    }
    criteria.Add(disjunction);

    return criteria.List<Word>();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文