Problem z DBNull i Linq

0

Witam,

mam problem - posiadam taki oto kod :

public IList znajdz_nazwisko(string nazwisko)
{
var nazwiska = from osoba in baza.Pracownicy where osoba.IsnazwiskoNull() != true where osoba.nazwisko.StartsWith(nazwisko) select osoba;
if (nazwiska.Any())
{

            IListSource lista;
            lista = nazwiska.CopyToDataTable();
            return lista.GetList();

        }
        else return null;
    }

Inaczej mówiąc pobieram sobie z bazy danych imiona i nazwiska pracowników - wszystkie dane (baza.Pracownicy to mój Dataset) i zapisuje to wszystko w liście IList.
W jaki sposób teraz odwołać się do konkretnego pola np. imię pracownika tzn.

IList lista = znajdz_nazwisko("Kowalski");

i teraz mogę podać index tzn. lista[2], ale czy można zrobić coś abym uzyskał konkretne pole tzn. lista["imie"] ?

Jeżeli na powyższe pytanie będą problemy z odpowiedzią to mam jeszcze inne ;)
Czy mogę od razu otrzymać listę typu Baza_z_relacjamiDataSet.PracownicyRow ?? Jeżeli tak to jak ją uzyskać w ten sposób, aby pozbyć się wartości DBNull.

Mogę taką listę zrobić w ten sposób :

public IList znajdz_nazwisko(string nazwisko)
{
var nazwiska = from osoba in baza.Pracownicy where osoba.IsnazwiskoNull() != true where osoba.nazwisko.StartsWith(nazwisko) select osoba;
if (nazwiska.Any())
{

            List<Baza_z_relacjamiDataSet.PracownicyRow> lista;
            lista = nazwiska.ToList();
            return lista;
        }
        else return null;

    }

Ale w ten sposób wywali mi błędy, jeżeli jakieś pole w bazie danych nie będzie określone tzn. będzie miało wartość DBNull. Może jakoś zapytanie do bazy można skonstruować inaczej, aby wartości DBNull były zastępowane domyślnymi wartościami, albo nie brane pod uwagę .... ? W przypadku korzystania z IListSource (ten przykład u góry) dzieje się to automagicznie :P tzn. tam pomimo tego, że nie mam określonej jakieś wartości to błędu DBNull nie mam ....

Proszę o pomoc - z góry dziękuję :)

0
przemek89k napisał(a)

Inaczej mówiąc pobieram sobie z bazy danych imiona i nazwiska pracowników - wszystkie dane (baza.Pracownicy to mój Dataset) i zapisuje to wszystko w liście IList.
W jaki sposób teraz odwołać się do konkretnego pola np. imię pracownika tzn.

IList lista = znajdz_nazwisko("Kowalski");

i teraz mogę podać index tzn. lista[2], ale czy można zrobić coś abym uzyskał konkretne pole tzn. lista["imie"] ?

Poczytaj sobie o select:
http://code.msdn.microsoft.com/LINQ-to-DataSets-09787825#SelectAnonymousTypes1

I jakbyś w przyszłości miał jakieś problemy z konstrukcją zapytań w linq, to tu masz 101 przykładów:
http://code.msdn.microsoft.com/windowsdesktop/101-LINQ-Samples-3fb9811b

1 użytkowników online, w tym zalogowanych: 0, gości: 1