ile birlikte Başımdan bu sorunla başa çıkıyorum. Bazı benzer durumlar var, ancak çözümler benim durumumda geçerli değildi.Dinamik LINQ (varlıklar için) Neredebildiğiniz DateTime sütunu
Dize biçiminde filtre sorgusu döndüren bir yöntem var. yöntem farklı veri türleri için mantığı var, doğru değerleri, sütun adları vb
string filterQuery = GetFilterQuery(params);
rows = rows.Where(filterQuery);
Sorunum veritabanında Nullable DateTime
var ve kod tarafında String
temsil hakkına sahip olmasıdır ayarlar.
denedim aşağıdaki sorguları (String
temsil yanlış şu anda olabilir):
"BirthDate.ToString() = \"16.2.2012 22:00:00\""
Sonuç: '? DateTime' Yöntemleri türüne Varlıkları için LINQ yöntemi 'System.string .ToString()' yöntemi tanımaz, ve bu yöntem, bir mağaza ifade tercüme edilemez:
"BirthDate.Value.ToString() = \"16.2.2012 22:00:00\""
Sonuç erişilemez.
"BirthDate == null ? 1=1 : (DateTime)BirthDate.ToString() = \"16.2.2012 22:00:00\""
Sonuç: '' ya da '('
Güncelleme (daha kaynak kodu sorgu nesil) burada
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);
}
Ve yaklaşık eklendi? Bir sınıf Filtre sorunu çözmek ve yöntemlerdir nasıl Herhangi fikirler beklenen bu bağlamla ilgili
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;
}
BirthDate.ToString() - Bu bağlamda Doğum tarihi nedir? Benim durumumda sadece bir sütun adı, bu yüzden kod bağlamında mevcut değil. – Tx3
Anladım. Güncellenmiş yanıtıma bir göz atın. –
Teşekkürler, ayrıca test edilmemiş yaklaşımı da deneyeceğim – Tx3