मैं एक Linq निम्नलिखित जैसे SQL करने के लिए है:LINQ एसक्यूएल गणना करने के लिए शामिल करें मिलती
var members=db.Members.Include(x=> x.Contact).Count();
अब कुछ बुरा डेटा की वजह से मेरी सदस्यों में सभी संपर्कों इसी संपर्क रिकॉर्ड नहीं है। तो गिनती के दौरान मैं संपर्क तालिका के साथ आंतरिक में शामिल होने के बाद गणना कैसे शामिल कर सकता हूं।
समस्या है जब मैं सदस्यों की सूची प्राप्त, सदस्यों की सूची है 100 रिकॉर्ड्स गणना 150 रिकॉर्ड (50 रिकॉर्ड खराब डेटा जा रहा है) है, जबकि।
var membersQ=db.Members.Include(x=> x.Contact).Select(i=> new MemberViewModel(){
Name = i.Contact.Name,
ContactId= i.Contact.Id,
CreatedDate= i.CreatedDate
}).AsQueryable();
var members=memberQ.ToList();// =100,paging is done...
// the memebers list uses paging but the count doesn't
var total=membersQ.Count(); // =150
मैं गिनती के दौरान परिणामी क्वेरी जाँच की, जाहिरा तौर पर यह संपर्क की मेज के साथ JOIN
ऐसा नहीं करता है, जबकि Count()
अद्यतन डेटाबेस संरचना
Member Table
Id ContactId, CompanyId, CreatedDate ...
Contact Table
Id Name ...
विदेशी ContactId के लिए में महत्वपूर्ण सदस्य तालिका डेटाबेस स्तर पर सेट नहीं है बल्कि केवल मॉडल पर है।
[ForeignKey("ContactId")]
Public Contact Contact { get; set; }
बुरा डेटा इस
मैं संपर्क रिकॉर्ड के रूप में पहले से 1,2,3,4,5,6,7,8,9,10 था और उन सभी संपर्कों की तरह चला जाता है सदस्य तालिका में थे भी।
अब मैंने संपर्क तालिका से रिकॉर्ड हटा दिए हैं 6-10 कहें। लेकिन सदस्य तालिका से हटाना नहीं हुआ।
तो यह गिनती के साथ एक मुद्दा पैदा कर रहा है। हां, सदस्य से खराब डेटा को हटाने से समस्या हल हो जाती है लेकिन सवाल यह है कि join while using Count()
का उपयोग कैसे करें।
नोट: मैं डेटाबेस प्रारंभकर्ता अशक्त का उपयोग
अद्यतन 2 मैं LINQPad का इस्तेमाल किया और दोनों डिफ़ॉल्ट Linq To SQL
और EntityFramework
(DbContext) कनेक्शन की कोशिश की और मैं क्या पाया भ्रामक है।
क्वेरी के लिए:
(from a in Members
join b in Contacts on a.ContactId equals b.ContactId
select a).Count()
डिफ़ॉल्ट LINQ का उपयोग कर
SELECT COUNT(*) AS [value]
FROM [Member] AS [t0]
INNER JOIN [Contact] AS [t1] ON [t0].[ContactID] = [t1].[ContactID]
SQL के Entityframework DbContext
SELECT
[GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT(1) AS [A1]
FROM [dbo].[Member] AS [Extent1]
) AS [GroupBy1]
का उपयोग करते हुए मेरी कोड में मैं DbContext विधि का उपयोग करें। तो .. पता नहीं क्या पर क्या करना है। Btw: linq-to-sql
के साथ एक टैग होने के लिए खेद है यह वास्तव में entityframework
प्रयास करें। प्रयत्न। memberQ.Contacts.Count() (यह 100 होना चाहिए) –
तो मुझे 'toList' के लिए उपयोग किए गए' की तुलना में 'संपर्क' का चयन करने वाली अलग-अलग क्वेरी का उपयोग करना होगा? – Ruchan