كيفية ترجمة رمز SQL "وجود" حالة في LINQ إلى SQL أو الكيانات ينق؟

StackOverflow https://stackoverflow.com/questions/319800

سؤال

هل لك أن تقول لي كيفية ترجمة رمز 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();

وأنا يمكن إساءة تفسير القصد الخاص على الرغم من. ربما لي نسخة من الاستعلام لا تفعل بالضبط ما تريد. إذا كان الأمر كذلك، وترك لي تعليق وسوف حذف الجواب حتى لا نخلط بين هذه المسألة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top