मेरा समाधान समाधान
मैं इस समस्या को हल करने में कामयाब रहा हूं। मुझे यहाँ गलत मत समझो। मैंने अभी तक वरीयता के मुद्दे को हल नहीं किया है, लेकिन मैंने इसे कम कर दिया है।
मैंने क्या किया?
जब तक मुझे Devart . से कोई जवाब नहीं मिल जाता, तब तक मैंने इस कोड का उपयोग किया है . अगर वे इस समस्या को दूर करने में सक्षम नहीं होंगे तो मुझे अंत में इस कोड का उपयोग करना होगा।
// get ordered list of IDs
List<int> ids = ctx.MyEntitySet
.Include(/* Related entity set that is needed in where clause */)
.Where(/* filter */)
.OrderByDescending(e => e.ChangedDate)
.Select(e => e.Id)
.ToList();
// get total count
int total = ids.Count;
if (total > 0)
{
// get a single page of results
List<MyEntity> result = ctx.MyEntitySet
.Include(/* related entity set (as described above) */)
.Include(/* additional entity set that's neede in end results */)
.Where(string.Format("it.Id in {{{0}}}", string.Join(",", ids.ConvertAll(id => id.ToString()).Skip(pageSize * currentPageIndex).Take(pageSize).ToArray())))
.OrderByDescending(e => e.ChangedOn)
.ToList();
}
सबसे पहले मुझे अपनी संस्थाओं की आईडी का आदेश दिया जा रहा है। डेटा के बड़े सेट के साथ भी केवल आईडी प्राप्त करना अच्छा प्रदर्शन करता है। MySql क्वेरी काफी सरल है और वास्तव में अच्छा प्रदर्शन करती है। दूसरे भाग में मैं इन आईडी को विभाजित करता हूं और वास्तविक इकाई उदाहरण प्राप्त करने के लिए उनका उपयोग करता हूं।
इसके बारे में सोचते हुए, इसे शुरुआत में जिस तरह से मैं कर रहा था उससे भी बेहतर प्रदर्शन करना चाहिए (जैसा कि मेरे प्रश्न में वर्णित है), क्योंकि सरलीकृत क्वेरी के कारण कुल गिनती प्राप्त करना बहुत तेज है। दूसरा भाग व्यावहारिक रूप से बहुत समान है, सिवाय इसके कि मेरी संस्थाओं को Skip
का उपयोग करके विभाजित करने के बजाय उनकी आईडी द्वारा लौटाया जाता है और Take
...
उम्मीद है कि किसी को यह समाधान मददगार लग सकता है।