具有XPath查询的SQL到LINQ转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有XPath查询的SQL到LINQ转换相关的知识,希望对你有一定的参考价值。

我开始从存储过程中删除一些SQL代码并将其转换为LINQ以在我的C#.NET应用程序中使用。使用下面的示例,如果xpath在XML列数据中找到匹配项,则查询应返回true。我是LINQ的新手,所以转换这个查询一直很有挑战性。任何帮助,将不胜感激! m / m /

declare
@userID       as uniqueidentifier = '8D1FA128-1684-487F-B7B2-978CE7FC6C83',
@isRockNRoll  as bit;

select @isRockNRoll = CASE WHEN EXISTS(select 1 from dbo.[MyTableName] where [myTableColumnName].query('/descendant-or-self::node()/text').value('text[1]/@userID','varchar(40)') = CONVERT(varchar(40),@userID)
                      and [myTableColumnName].query('/descendant-or-self::node()/text').value('text[1]/@genre','varchar(50)') = 'RockNRoll') THEN 1
                      ELSE 0 END

-- myTableColumnName XML column value:
-- <userID>8D1FA128-1684-487F-B7B2-978CE7FC6C83</userID><genre>RockNRoll</genre>

.NET实现示例。

    private bool IsRockNRoll(Guid userID)
    {
        using (var context = new MyContext())
        {
            var strIsRockNRoll = (from TBL in context.MyTableName
                                  where TBL.myTableColumnName.userID == userID
                                  && TBL.myTableColumnName.genre == "RockNRoll").SingleOrDefault();

            if (strIsRockNRoll != null)
            {
                    return true;
            }
            else
            {
                return false;
            }
        }
    }
答案

我是LINQ的新手,但这似乎有用...... m / m /

private bool IsRockNRoll(Guid userID)
{
    using (var context = new MyContext())
    {
        bool blnIsRockNRoll = false;
        var result = (from o in context.MyTableName.AsEnumerable()
                        where o.myTableColumnName.Contains(userID.ToString())
                        && o.myTableColumnName.Contains("RockNRoll")
                        select o).ToList();

        if (result.Count > 0)
        {
            blnIsRockNRoll = true;
        }

        return blnIsRockNRoll;
    }
}

以上是关于具有XPath查询的SQL到LINQ转换的主要内容,如果未能解决你的问题,请参考以下文章

将sql代码转换为linq(内连接查询)

协助将 SQL 查询转换为 LINQ 查询

无法在转换后的查询中访问表(普通 SQL 到 LINQ)

使用 NOT IN 的 SQL 到 LINQ 转换

在linq中将sql查询转换为linq new

将 SQL 语句转换为 DataTable 上的 LINQ 查询