Mam listę, które utworzyć z DataTabe, który ma tylko jedną kolumnę w nim. Powiedzmy, że kolumna nazywa się MyColumn. Każdy element na liście jest tablicą obiektów zawierającą moje kolumny, w tym przypadku tylko jedną (Moja kolumna). Jaki jest najbardziej elegancki sposób sprawdzenia, czy ta tablica obiektów zawiera pewną wartość?Wyszukaj na liście <DataRow>?
Odpowiedz
var searchValue = SOME_VALUE;
var result = list.Where(row => row["MyColumn"].Equals(searchValue)); // returns collection of DataRows containing needed value
var resultBool = list.Any(row => row["MyColumn"].Equals(searchValue)); // checks, if any DataRows containing needed value exists
http://dotnetperls.com/list-find-methods ma coś o istnieje & znaleźć.
Cóż, to zależy od tego, jaka wersja C# i .NET jesteś, przez 3,5 można zrobić z LINQ:
var qualiyfyingRows =
from row in rows
where Equals(row["MyColumn"], value)
select row;
// We can see if we found any at all through.
bool valueFound = qualifyingRows.FirstOrDefault() != null;
który daje zarówno wiersze spełniające i bool który mówi ci, czy w ogóle coś znalazłeś.
Jednak jeśli nie masz LINQ lub metod rozszerzeń, które pochodzą z nim trzeba będzie przeszukać listę „Old Skool”:
DataRow matchingRow = null;
foreach (DataRow row in rows)
{
if (Equals(row["MyColumn"], value))
{
matchingRow = row;
break;
}
}
bool valueFound = matchingRow != null;
która daje pierwszy wiersz, który pasuje, to można oczywiście zmienić, aby znaleźć wszystkie wiersze, które pasują, co sprawiłoby, że dwa przykłady byłyby mniej więcej równe.
Wersja LINQ ma jednak zasadniczą różnicę, ale licznik IEnumerable, który można uzyskać z niej, jest odroczony, więc obliczenia nie zostaną wykonane, dopóki nie wyliczysz jego członków. Nie wiem wystarczająco dużo o DataRow lub twojej aplikacji, aby wiedzieć, czy to może być problem, czy nie, ale był to problem w kawałku mojego kodu, który zajmował się NHibernate. Zasadniczo wyliczyłem sekwencję, której członkowie już nie są ważni.
Możesz samodzielnie tworzyć własne odroczone obiekty IEnumerables, używając iterators w C# 2.0 i wyższych.
Jeśli często powinieneś wyszukiwać, myślę, że nie jest wygodne pisanie za każdym razem wyrażenia LINQ. Chciałbym napisać przesuwnych metody takie jak to:
private static bool ContainsValue(this List<DataRow> list, object value)
{
return list.Any(dataRow => dataRow["MyColumn"].Equals(value));
}
a potem make wyszukiwania:
if (list.ContainsValue("Value"))
może mam błędne odczytanie tego, ale wydaje się, że dane są obecnie w List<object[]>
a nie w DataTable tak aby elementy spełniające określone kryteria można zrobić coś takiego:
var matched = items.Where(objArray => objArray.Contains(value));
pozycji byłby to lista obiektów []: S i dopasowane byłoby IEnumerable []> z obiektu []: s z wartością.
Nie, znajduje się na liście
- 1. Linux: Wyszukaj konkretne słowo na liście plików w katalogu
- 2. HTML5, <section> na nieuporządkowanej liście
- 3. Edycja pozycję na liście <T>
- 4. Wyraźny operator na liście <string>
- 5. Wyszukaj występowanie listy wartości
- 6. Zakres sum int jest na liście <int>
- 7. Jak zaktualizować obiekt na liście <> w języku C#
- 8. Ustaw wiele właściwości na liście <T> ForEach()?
- 9. Obsada listy Wyświetl elementy na liście <string>?
- 10. string.join na liście <int> lub innego rodzaju
- 11. Jak znaleźć konkretny element na liście <T>?
- 12. Wyrażenie Lambda, jak wykonać String.Format na liście <String>?
- 13. Jak znaleźć zduplikowane elementy na liście <>?
- 14. Parallel.ForEach na liście <Object> Bezpieczeństwo wątków
- 15. Jak działa metoda RemoveRange() na liście <>?
- 16. C# modyfikowanie struktur na liście <T>
- 17. Jak zdobyć zaznaczone elementy CheckedListBox na liście <X> ...?
- 18. HashMap <String, Integer> Wyszukaj część klucza?
- 19. Liczba elementów z int <5 na liście <T>
- 20. Wyszukaj i zamień na ukośnik w przód
- 21. Wyszukaj i zamień na Regex zastępując zmienne
- 22. Entity Framework 4 wyszukaj na połączonych polach
- 23. Pierwsze pozycję na liście
- 24. Czekają na liście zadań
- 25. Przenieść pozycję na liście?
- 26. Obrazy na liście rozwijanej
- 27. foreach na liście [C#]
- 28. Błąd na liście rozwijanej
- 29. Zamów na liście
- 30. Max DateTime na liście
Chodzi o to, że lista zawiera tablicę, którą muszę przeszukać w ... więc myślę, że nie muszę przeszukiwać listy, ale tablicę (y) na liście. – grady