我需要使用Entity Framework,LINQ在我的asp.net mvc(C#)应用程序中查询SQL中的XML数据.
我有一个XMLValue包含数据的列
<MetaData>
<Reviews>1</Reviews>
<Rating>1</Rating>
</MetaData>
Run Code Online (Sandbox Code Playgroud)
我需要从xml中获得所有Customers拥有Rating1的人.我已经提到了这个stackoverflow帖子,我无法实现它.
我添加了SQL函数并将其添加到我的edmx:
CREATE FUNCTION [dbo].[FilterCustomersByRating]
(@Rating int)
RETURNS TABLE
AS
RETURN
SELECT XMLTest.*
FROM XMLTest
CROSS APPLY XMLValue.nodes('//MetaData') N(C)
where N.C.value('Rating[1]', 'int')=@Rating
GO
Run Code Online (Sandbox Code Playgroud)
以及DB功能:
[DbFunction("XMLDBModel.Store", "FilterCustomersByRating")]
public static IQueryable<XMLTest> MyXmlHelper(int rating)
{
throw new NotImplementedException("You can only call this function in a LINQ query");
}
Run Code Online (Sandbox Code Playgroud)
下面是我在帖子中完全尝试的linq查询,但是无法使用该函数并且它会抛出错误.
var _dbCustomers = (from x in _context.XMLTests
where MyXmlHelper(1).Where(xh=> xh.XMLValue.Contains("1"))
select x);
Run Code Online (Sandbox Code Playgroud)
错误:
Cannot implicitly convert type 'System.Linq.IQueryable<XMLTest>' …Run Code Online (Sandbox Code Playgroud)