Linq'te "... burada (a = 1) OR (a = 2)" gibi SQL dizeleri oluşturmak için kullanabileceğiniz bir yöntem var mı?
Yanıtlar:
Bunu kesinlikle bir Where cümlesi (uzatma yöntemi) içinde yapabilirsiniz. Dinamik olarak karmaşık bir sorgu oluşturmanız gerekiyorsa, bir PredicateBuilder kullanabilirsiniz .
var query = collection.Where( c => c.A == 1 || c.B == 2 );
Veya bir PredicateBuilder kullanarak
var predicate = PredicateBuilder.False<Foo>();
predicate = predicate.Or( f => f.A == 1 );
if (allowB)
{
predicate = predicate.Or( f => f.B == 1 );
}
var query = collection.Where( predicate );
Standart .NET boole işleçlerini tek where cümlenizde kullanabilirsiniz:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
sizin de .Where()
çağrı standart Boole 'Ya' operatörünü kullanın ||
.
var query = items.Where(item => (item == 1 || item == 2));
Where çağrısının yaptığı tek şey, istediğiniz herhangi bir şeyin Boolean karşılaştırmasıdır, böylece istediğiniz kadar koşullu mantıkla doldurabilirsiniz.
Parametre sayısını bilmiyorsanız, bunu kullanabilirsiniz:
Örnek veri
var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
sampledata["a"] = "A";
sampledata["b"] = "B";
sampledata["c"] = "C";
sampledata["d"] = "D";
Kod
var query = sampledata.AsQueryable();
var firstItemKey = sampledata.FirstOrDefault().Key;
var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable();
foreach (var parameter in parameters.Skip(1))
{
queryresult=queryresult.Concat(query.Where(x => x.Key == parameter));
}
var result = queryresult.ToList();
Bu şimdi .net içine yerleştirilmiştir, daha önce olmadığından emin değilim. Mevcut bir Linq sorgusu verildiğinde, bir dizi dizeyi (SearchStrings) alan bir where cümlesi ekleyebilir ve aradığınız koleksiyondaki herhangi bir nesneyle eşleşip eşleşmediğini kontrol edebilirsiniz. ToLower () kullanmak sadece SQL sorgularında büyük / küçük harf duyarlılığından kaçınmanızı sağlar.
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
Bir 've' yüklemi için aynı şeyi, dizideki tüm kelimeleri koleksiyonun nesnesiyle eşleştirerek yapabilirsiniz.
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
Bu örnekte, bir koleksiyondaki her bir nesneyle ilişkilendiririm ve s SearchStrings dizisindeki her dizeyle ilişkilendirir.
||
Dinamik bir şeyi nasıl kullanacağını ve istediğini bildiğini varsayıyoruma=a.where(hour=> hour<20); if(weekend) a=a.where(hour=> hour>6);
. Bunu daha açık bir şekilde belirtmek isteyebilirsiniz ...