簡體   English   中英

Linq to SQL where子句,以varchar作為xml

[英]Linq to SQL where clause with varchar as xml

我正在嘗試使用Linq to SQL進行選擇。 需要將varchar類型的列轉換為XML,並且我需要評估第一個元素值,以查看它是否等於要傳遞給方法的值。

這是有效的SQL語句:

CREATE PROC [dbo].[GetQueuedMsgs]
    @FirstSMSRoute VARCHAR(50)
AS
BEGIN   

SET NOCOUNT ON;
UPDATE  tblCommsQueue 
     SET isInProcess=1
    OUTPUT                  
        inserted.QueueID,
        inserted.CommsGuid,
        inserted.ValidityDT,
        te.EncodingType,
        inserted.DestAddress,
        inserted.Msg,
        '' as RoutingLabel,
        inserted.SubmittedDT,
        inserted.SendDT,
        inserted.SystemID,
        inserted.BusinessID,
        inserted.smsRoute,
        inserted.EncodingTypeID,
        inserted.RequestingIP
FROM tblCommsQueue tq   WITH(HOLDLOCK )
JOIN tblEncodingType te
ON tq.EncodingTypeID=te.EncodingTypeID
WHERE       
    SendDT<=GETDATE() 
    AND CommsTypeID=1 
    AND isInProcess=0
    AND CAST(CAST(smsRoute as ntext) as xml).value('(/ArrayOfSMSRoute/SMSRoute)[1]','varchar(260)')=@FirstSMSRoute

結束

XML如下:

<?xml version="1.0" encoding="utf-16"?>  
    <ArrayOfSMSRoute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    
        <SMSRoute>BGWASP</SMSRoute>
        <SMSRoute>Grape</SMSRoute>
        <SMSRoute>iliveit</SMSRoute>  
</ArrayOfSMSRoute>

和linq to SQL語句,我在做什么錯? 問題出在where子句的xml部分。

var results = from RN in mdc.tblCommsQueueTests
                          where
                            RN.CommsTypeID == 1
                            && RN.isInProcess == false
                            && RN.SendDT <= DateTime.Now
                            //&& XDocument.Parse(RN.smsRoute).Descendants().Where(x => x.Name.LocalName == FirstRoute.ToString()).FirstOrDefault().Name == FirstRoute.ToString()
                            && (from r in XDocument.Parse(RN.smsRoute).Descendants().Elements("smsRoute")  select r.Value ).FirstOrDefault() == FirstRoute.ToString()
                          select RN;

看一下更新命令的where子句中的'(/ArrayOfSMSRoute/SMSRoute)[1]'

如果要提取<ArrayOfSMSRoute>下的第一個<SMSRoute>元素的值,則可能看起來像這樣:

'(/ArrayOfSMSRoute/SMSRoute[1])'

注意右括號')'的新位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM