bir elemanın konumunu belirleme Bazı koşul tarafından sipariş edilen bir IQueryable var. Şimdi belirli bir öğenin IQueryable içindeki konumunu bilmek istiyorum. Bunu elde etmek için bir linq ifadesi var mı? Say örneğin ben numara almak istiyorum, orada IQueryable 10 unsurlarıdır ve 6. eleman bir koşula uyan 6.bir IQueryable
cevap
İlk sonra öğelere filtre, onun indeksi her öğeyi seçin ve son olarak orijinal endeksi ayıklamak:
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
Testi yatak:
class Program
{
static void Main(string[] args)
{
var orderedList = new List<string>
{
"foo", "bar", "baz", "qux", "quux",
"corge", "grault", "garply", "waldo",
"fred", "plugh", "xyzzy", "thud"
}.OrderBy(x => x);
// bar, baz, corge, foo, fred, garply, grault,
// plugh, quux, qux, thud, waldo, xyzzy
// Find the index of the first element beginning with 'g'.
var result = orderedList
.Select((x, i) => new { Item = x, Index = i })
.Where(itemWithIndex => itemWithIndex.Item.StartsWith("g"))
.FirstOrDefault();
int index= -1;
if (result != null)
index = result.Index;
Console.WriteLine("Index: " + index);
}
}
Çıktı:
Index: 5
+ 1- Cevabımda da aynısını yaptım. – RichardOD
Bu çözüm, tüm işlemler için SQL üretir mi, yoksa IQueryable'ın tüm öğelerini seçer ve yalnızca bu işlem bellekteki işlemleri yaptıktan sonra mı? –
o önceki değerleri, sıralandıran etkisi vardır gerçi sen query.TakeWhile(x => !matchesCondition(x)).Count()
gibi bir şey kullanabilirsiniz hangi istediğin şey olmayabilir.
Sen zaten o önceki değerlere Numaralandırılacak getirmeniz gerekiyor, gayet iyi çalışıyor thats ne oldu, indeks 0 sahiptir? – treaschf
İlginç bir çözüm. Bir bellek nesnesi olsaydı, önceki değerlerin numaralandırılması tamam olurdu, ancak bir DB için değil. Öğe listede değilse, bu işlev listenin uzunluğunu döndüreceğini unutmayın. Normalde, bu tür fonksiyonların -1 veya belki de sıfır olması beklenir. –
@Mark Byers: Sorunun, istenen elemanın mevcut olduğu ve sadece pozisyonun arzu edildiğini ima ettiği ifadesini okudum; DB senaryosu gerçekten de sayım konusunda endişeliydi. Pratikte, bunu bir IQueryable'a yapmanın aksini bildiğinden şüpheliyim, fakat hızlı bir korsanlık olarak bu yaklaşım en azından özlü ve anlaşılabilir bir durumdur. –
Ayrıca, koleksiyon dizinini, yüklemiş fu'ye bir parametre olarak ekleyen "Nerede" işlevinin versonunu da kullanabilirsiniz. nction. Daha fazla bilgi için bkz. MSDN. Bir 6 unsur yoksa
var result = Enumerable.Range(0, 10).Where((x, i) => i == 6);
versiyonu boş bir listeye neden olabilir. Ayrıca bu, sonuç üzerinde yinelemeye başlayana kadar nerede olduğunu değerlendirmez.
- 1. IQueryable C#
- 2. Özel bir sınıf IQueryable oluşturma
- 3. IQueryable adlı sözlükteki Sözlük
- 4. Erişim IQueryable üzerinden DbContext
- 5. DataTable için IQueryable dönüştürme
- 6. Otomatik döndürücüyü kullanarak IQueryable
- 7. Access DataContext'in arkasında IQueryable
- 8. Dapper.NET ve IQueryable
- 9. HashSet IQueryable vs
- 10. Servis Kumaşı - IQueryable
- 11. LINQ ile farklı bir IQueryable döndürmek?
- 12. C# - IQueryable toList Async - EF6
- 13. IQueryable Grup çalışmasının nasıl gerçekleştirileceği
- 14. Linq ObjectQuery Dönüştürün IEnumerable IQueryable
- 15. alaycı ve IQueryable <T>
- 16. Nasıl IQueryable döndürür <T>
- 17. Bir Union ifadesi kullanmadan önce IQueryable değişkenlerini nasıl başlatmalıyım?
- 18. Bir IQueryable ifadesini manuel olarak değiştirmek mümkün mü?
- 19. IQueryable ile yinelemek foreach sonuç dışı bir bellek istisnası sonucu
- 20. Linq IQueryable uygulanmış bir siparişin var olup olmadığını kontrol edin
- 21. OData sorguları ve ASP.NET Web API'sinde IQueryable dışındaki türler
- 22. IQueryable <object> parametresinin virgülle ayrılmış dizgeye dönüştürülmesi
- 23. IList <T> IQueryable için <T>
- 24. Sorun yaratma boş IQueryable <T> object
- 25. Depolar IQueryable <T>'u uygulamalı mı?
- 26. convert IQueryable <int> to <int>
- 27. IQueryable <T> Nasıl Dönüştürülür <T>?
- 28. Trim() kırpılmış bir IQueryable oluşturmak için dinamik sorgu dili kullanan dizelerin bir listesi <string>
- 29. dbContext bir 'using' bloğu ile bir IQueryable Linq'den SQL sorgusuna nasıl döndürebilirim?
- 30. IQueryable sorgusunun bir parçasını gerçekleştirme ve geri kalanını Nesneler için Linq'e erteleme
Eğer 6 eleman eşleşirse numara 5 almak istemiyor musunuz? Normalde ilk unsur ikinci indeks 1, vb –
evet istediğim ve aşağıdaki cevabı – San