كيفية ترجمة رمز SQL "وجود" حالة في LINQ إلى SQL أو الكيانات ينق؟
-
11-07-2019 - |
سؤال
هل لك أن تقول لي كيفية ترجمة رمز SQL التالية لينق إلى SQL أو LINQ إلى Entites؟
وشفرة SQL الصحيح هو:
<اقتباس فقرة>وحدد CollectId، رابط، حاليا، pubtime من مجموعة اجمع من قبل رابط، collectid، حاليا، بعد أن pubtime pubtime> = (SELECT MAX (pubtime) من جمع d حيث d.url = collect.url) أمر من Collect.pubtime تنازلي
اقتباس فقرة>والسيناريو جدول قاعدة البيانات هو:
<اقتباس فقرة>وإذا وجدت (حدد * من sysobjects حيث معرف = OBJECT_ID ( '[جمع]') و OBJECTPROPERTY (الهوية، 'IsUserTable') = 1) DROP TABLE [جمع]
وCREATE TABLE [جمع] ([CollectId] [الباحث] الهوية (1، 1) NOT NULL، [رابط] [NVARCHAR] (200) NULL، [معرف المستخدم] [NVARCHAR] (50) NULL، [PubTime] [التاريخ والوقت] NULL)
وALTER TABLE [جمع] مع NOCHECK ADD CONSTRAINT [PK_Collect] المفتاح الأساسي غير متفاوتة المسافات ([CollectId]) SET IDENTITY_INSERT [جمع] ON
وإدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 1، "www.sohu.com '،' مايك '،' 2008-10-10 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 2، "www.echina365.com '،' ليلى '،' 2008-10-15 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 3، "www.php.com '،' توم '،' 2008-10-20 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 4، "www.echina365.com '،' YaoMing '،' 2008-10-23 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 5، "www.echina365.com '،' مايك '،' 2008-10-25 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 6، "www.sohu.com '،' جاك '،' 2008-10-26 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 7، "www.echina365.com '،' تريسي '،' 2008/11/02 00:00:00 ') إدراج [جمع] ([CollectId]، [رابط]، [معرف المستخدم]، [PubTime]) القيم ( 8، "www.php.com '،' YaoMing '،' 2008/11/05 00:00:00 ')
وSET IDENTITY_INSERT [جمع] OFF
اقتباس فقرة>المحلول
ومنذ الخاصة بك "وجود" حالة ليست في الواقع على العمود مجمعة، لا يمكن لك فقط استخدام "حيث" شرط؟
select distinct CollectId, url, userid, pubtime
from Collect
where pubtime >= (select max(pubtime) from collect d where d.url = collect.url)
order by Collect.pubtime desc
وهذا يحصل على نفس النتيجة نظرا للبيانات التي قمت بتوفيرها. البيان LINQ ثم يصبح معقول بسيط:
var rows = (from c in Collect
where c.PubTime >= (
from d in Collect
where d.Url == c.Url
select d.PubTime).Max()
orderby c.PubTime descending
select c).Distinct();
وأنا يمكن إساءة تفسير القصد الخاص على الرغم من. ربما لي نسخة من الاستعلام لا تفعل بالضبط ما تريد. إذا كان الأمر كذلك، وترك لي تعليق وسوف حذف الجواب حتى لا نخلط بين هذه المسألة.