Я пытаюсь сделать выбор с Linq to SQL. Столбец типа varchar должен быть преобразован в XML, и мне нужно оценить значение первого элемента, чтобы увидеть, совпадает ли оно со значением, которое я передаю в метод.Linq to SQL where предложение с 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)')[email protected]
END
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 к SQL заявление, что я делаю не так? Проблема заключается в xml-части предложения where.
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;
какая проблема имеет код LINQ? – Tigran
Это не исключение, но, оставляя в этой строке, я не получаю никаких результатов назад – BossRoss