4
我有這樣的場景:LINQ到實體和XML字段
- 與FIELD1,xmlField(爲nvarchar(50)和XML SQL Server數據類型)
- LINQ到實體SQL Server表myTable的
現在我想獲得這樣的查詢:
SELECT Field1, XmlField
FROM MyTable
WHERE CAST(XmlField AS nvarchar(4000)) = '<myXml />'
顯然,這是在SQL Server中,但我一個正確的查詢在L2E中找不到解決方案。
請指示,該代碼不起作用:
var query = from row in context.MyTables
where (string)row.XmlField == "<myXml />"
select row
和其他劇組方法了。 這只是因爲在L2E中「ToString」不能正常工作。現在
我的想法是這樣的一種:一個擴展方法:
var query = from row in context.MyTables
select row
query = query.CompareXml("XmlField", "<myXml />")
,這是擴展的方法:
public static IQueryable<TSource> CompareXml<TSource>(this IQueryable<TSource> source, string xmlFieldName, string xmlToCompare)
{
ConstantExpression xmlValue = Expression.Constant(xmlToCompare);
ParameterExpression parameter = Expression.Parameter(typeof(TSource), source.ElementType.Name);
PropertyInfo propertyInfo = typeof(TSource).GetProperty(xmlFieldName);
MemberExpression memberAccess = Expression.MakeMemberAccess(parameter, propertyInfo);
var stringMember = Expression.Convert(memberAccess, typeof(string));
BinaryExpression clauseExpression = Expression.Equal(xmlValue, stringMember);
return source.Where(Expression.Lambda<Func<TSource, bool>>(clauseExpression, parameter));
}
,並再次,這並不工作過。
現在我想了解如何使用Cast強制執行「轉換」,以便可以比較Xml和nvarchar。
在此先感謝 的Massimiliano