मैं एक सामान्य वर्ग कि फिल्टर करने, आदेश, परियोजना और एक IQueryable
पृष्ठ पर अंक लगाना माना जाता है है को दूर नहीं करता:एफई IQueryable पर अलग इस विधि को फोन करके डुप्लिकेट
public async Task<PagedResult<TResult>> GetFilteredOrderedPageAsync<TResult>(IQueryable<TSource> source,
IFilterModel filterModel,
ISortModel sortModel,
int page, int pageSize,
Expression<Func<TSource, TResult>> converter)
where TResult : class
{
var filtered = Filter(source, filterModel);
var projected = filtered
.Select(converter)
.Distinct();
var ordered = Sort<TResult>(projected, sortModel);
var result = await GetPageAsync<TResult>(ordered, page, pageSize, converter);
return result;
}
मैं Distinct()
यहाँ
var projected = filtered
.Select(converter)
.Distinct();
।
मेरे धारणा यह थी कि EF6 एक ही यदि एक ही col1, col2, col3 लेकिन अलग col4 साथ दो पंक्तियों हैं
SELECT DISTINCT Col1, Col2, Col3 FROM (SELECT Col1, Col2, Col3, Col4 FROM SOME_TABLE WHERE <some conditions on co1, col2, col3, col4 ...>)
की तरह कुछ यानी कि वह प्रक्षेपण के लिए DISTINCT
लागू होगा उत्पन्न होगा, इसलिए,, पंक्ति इसे परिणाम में बना देगा। हालांकि, एसक्यूएल है कि मैं पाने के इस तरह दिखता है:
SELECT Col1, Col2, Col3, Col4 FROM (SELECT DISTINCT Col1, Col2, Col3, Col4 FROM SOME_TABLE)
- कोई प्रक्षेपण, और विशिष्ट, एक सबक्वेरी में स्थानांतरित कर दिया गया है जैसे कि मैं यह कर रहे थे जाता है:
var projected = filtered
.Distinct()
.Select(converter)
मैं के लिए इस सेवा चाहते हैं एक सामान्य, यानी TSource
और TResult
के साथ संभावित रूप से काम करना, लेकिन ऐसा लगता है कि यहां कुछ गड़बड़ है और ईएफ क्या करता है मेरी समझ सही नहीं है।
यहां क्या हो रहा है?
अद्यतन
मेरा मानना है कि समस्या मेरी कनवर्टर में है।
public class ProvidersViewModel
{
public string Name { get; set; }
public Rate Rate { get; set; }
publi QA QA { get; set; }
...
public static Expression<Func<ProviderJoinRateAndQA, ProvidersViewModel>> FromProvider(bool showRateAndQA)
{
return x => new ProvidersViewModel {
Name = x.Name,
Rate = showRateAndQA ? new Rate { Amount = x.Rate.Amount ... } : null,
Rate = showRateAndQA ? new QA { Grade = x.QA.Grade ... } : null
};
}
}
ProviderJoinRateAndQA
एक प्रदाताओं, अपनी दरें और प्रश्नोत्तर के शामिल होने है: मैं लैम्ब्डा अभिव्यक्ति Select
के लिए पारित उत्पन्न करने के लिए निम्नलिखित समारोह का इस्तेमाल किया। प्रत्येक Provider
में कई सेवाएं, दरें और qas हो सकते हैं। कुछ मामलों में मैं मॉडल को दर और क्यूए जानकारी छिपाने के लिए देखना चाहता हूं। मुझे लगता है कि मैं इसे null
Rate
और QA
गुणों को असाइन करके कर सकता हूं, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है: Distinct
गलत तरीके से काम करता है।
दर = showRateAndQA को बदलने के बाद? नया क्यूए {ग्रेड = x.QA.Grade ...}: दर = नया क्यूए {ग्रेड = showRateAndQA? x.QA.Grade: शून्य ...},
Distinct
सही ढंग से काम किया।
स्पष्ट रूप से ईएफ को मेरे लैम्ब्डा में ऑब्जेक्ट करने के लिए null
असाइन करना पसंद नहीं आया।
एक बग की तरह लग रहा। क्या आप एक निष्पादन योग्य repro पोस्ट कर सकते हैं? ईएफ को वैसे भी एक फिक्स के लिए इसकी आवश्यकता होगी। – usr
मैं इन सबसे छुटकारा नया हूँ, पता नहीं कैसे निष्पादन रेप्रो सही ढंग से पोस्ट करने के लिए। बस कोड पोस्ट करें या परियोजना को कहीं छोड़ दें और उससे लिंक करें? – AunAun
आप इस के बारे में सुनिश्चित कर रहे हैं? क्या आप सुनिश्चित हैं कि आपका कनवर्टर सही है? – xanatos