LINQ   zodpovězená otázka

ASP.NET WebForms

Nazdárek.

Pomoci LINQ s využitím join spojím 2 tabulky a pak z nich tahám data třeba nějak takhle:

var news = from n in dc.News
                   join u in dc.Users on n.UserId equals u.UserId
                   orderby n.DateCreated descending
                   select new { n.Title, n.Description, n.DateCreated, u.Name, u.Surname };

Když to řeším přímo ve stránce, tak komponenty naplním podle potřeb pomocí DataBind(). Ale když si chci vytvořit jen funkci:

    public IEnumerable<T> GetNews()
    {
        using (var dc = new LinqToGSChWebDataContext())
        {
            var news = from n in dc.News
                       join u in dc.Users on n.UserId equals u.UserId
                       select new { n.Title, n.Description, n.DateCreated, u.Name, u.Surname };
            return news.ToList();

        }
    }

která mi bude vracet IEnumerable<T>, je nějaká možnost donutit Visual studio, aby dané uložiště vytvořilo samo podle potřeb? Nebo si to musím navrhnout sám?

Díky moc za jakoukoliv odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je v tom, že vy nesmíte vracet anonymní objekty z metody. To T v typu IEnumerable je jen vlastní typová proměnná, kterou tady nikde nepoužíváte.

Buď můžete udělat metodu generickou, pak by měla hlavičku

public IEnumerable<T> GetNews<T>()

, což by znamenalo, že metoda bere jeden typový parametr a volala by se

GetNews<int>()

anebo jen

GetNews()

, pokud by tato metoda měla parametry a typ T by se z nich dal odvodit. Tohle však v tomto konkrétním případě nemá příliš smysl.

To, co potřebujete, je, aby metoda nevracela anonymní typ, ale nějaký konkrétní typ. Udělejte si třídu NewsItem, která bude mít vlastnosti Title, Description, DateCreated, Name a Surname. Stačí použít automaticky implementované vlastnosti:

public string Title { get; set; }

Samotnou metodu GetNews pak udělejte tak, aby vracela IEnumerable<NewsItem> a v klauzuli select dejte

... select new NewsItem { Title = n.Title, ... }

Anonymní typy můžete používat jen v rámci metody. Dostat je ven se nedají (resp. dají, ale takovým hnusným hackem a nedělá se to).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback