मैं इस समस्या पर कुछ समय के लिए अपने सिर पर टक्कर लगी हूं। कुछ समान मामले हैं, लेकिन मेरे मामले पर समाधान लागू नहीं थे।गतिशील LINQ (इकाइयों के लिए) जहां शून्य दिनांक दिनांक कॉलम
मेरे पास एक तरीका है जो स्ट्रिंग प्रारूप में फ़िल्टर क्वेरी देता है। विधि विभिन्न डेटा प्रकार के लिए तर्क है, सही मान, स्तंभ नाम आदि
string filterQuery = GetFilterQuery(params);
rows = rows.Where(filterQuery);
मेरे समस्या यह है कि मैं डेटाबेस में Nullable DateTime
है और मैं कोड पक्ष में String
प्रतिनिधित्व है निर्धारित करता है।
निम्नलिखित मैं कोशिश की है प्रश्नों (String
प्रतिनिधित्व गलत वर्तमान में हो सकता है):
"BirthDate.ToString() = \"16.2.2012 22:00:00\""
परिणाम: '? दिनांक समय' तरीके प्रकार पर
"BirthDate.Value.ToString() = \"16.2.2012 22:00:00\""
परिणाम सुलभ नहीं हैं: संस्थाओं को LINQ विधि 'System.String ToString()' विधि को नहीं पहचानता है, और इस विधि एक दुकान अभिव्यक्ति में अनुवाद नहीं किया जा सकता है।
"BirthDate == null ? 1=1 : (DateTime)BirthDate.ToString() = \"16.2.2012 22:00:00\""
परिणाम: '।' या '(' उम्मीद
कैसे एक वर्ग फ़िल्टर समस्या को हल करने?अद्यतन (अधिक स्रोत कोड क्वेरी पीढ़ी)
var filterQueries = query.GridFilteringOptions.filters
// remove filters that doesn't have all the required information
.Where(o => o.name != string.Empty && o.value != string.Empty && !string.IsNullOrEmpty(o.type))
// remove filters that are filtering other tables than current
.Where(o => o.table == tableName)
.Select(filter => filter.ResolveQuery()).ToList();
if (filterQuery.Any())
{
var filterQuery = string.Join(" And ", filterQueries);
rows = rows.Where(filterQuery);
}
और यहाँ के बारे में जोड़ा जाता है और तरीके हैं कोई भी विचार
इस संदर्भ से संबंधित
public string ResolveQuery()
{
if (type == "Int64")
{
return ResolveInteger();
}
else if(type == "String")
{
return ResolveString();
}
else if(type == "DateTime")
{
return ResolveDateTime();
}
else
{
return string.Empty;
}
}
private string ResolveDateTime()
{
DateTime result = new DateTime();
if (DateTime.TryParse(this.value, out result))
{
return string.Format("{0}.ToString() = \"{1}\"", this.name, result.ToUniversalTime());
}
return string.Empty;
}
private string ResolveString()
{
switch (@operator)
{
default:
return string.Format(@"{0}.StartsWith(""{1}"")", this.name, this.value);
}
}
private string ResolveInteger()
{
string tmp = this.name;
switch (@operator)
{
case -1:
return string.Empty;
case 0:
tmp += "<";
break;
case 1:
tmp += "=";
break;
case 2:
tmp += ">";
break;
default:
return string.Empty;
}
tmp += value;
return tmp;
}
जन्मदिन। टोस्टिंग() - इस संदर्भ में जन्मदिन क्या है? मेरे मामले में सिर्फ एक कॉलम नाम है, इसलिए यह कोड संदर्भ में मौजूद नहीं है। – Tx3
मैं देखता हूं। मेरे अद्यतन उत्तर पर एक नज़र डालें। –
धन्यवाद, मैं अवांछित दृष्टिकोण भी कोशिश करूंगा – Tx3