Loading...
StefanG avatar StefanG 3 Точки

[Homework] Entity Framework

Здравейте колеги.Извинявам се за тъпия въпрос, но някой може ли да ми каже къде ми е грешката в този код? http://pastebin.com/svAvfs87. Вместо да ми изкара информацията, ми връща или заявката или ако е .ToList() нещо от сорна на System.Collection.Generics...

Мерси предварително.

0
Databases Basics
a.angelov avatar a.angelov 1316 Точки

FirstName = p.Employees.Select(e => e.FirstName)

FirstName ти е колекция от първите имена на всички емплоита, които работят по проекта. Затова не можеш просто да ги принтираш, а трябва да foreach-неш и тях.

 

ПС. Пояснението на Filkolev е по-точно.

0
17/07/2015 15:49:44
Filkolev avatar Filkolev 4482 Точки

Корекция - FirstName е заявка, заради lazy loading-a колекцията ще се напълни чак при форийчване или извикване на агрегатна функция като Count(). Бидейки заявка, ToString() метода й връща текста на заявката като стринг.

1
Abraxas avatar Abraxas 47 Точки

За да не спамя във форума с нова тема, ще се възползвам от тази. Имам проблем със второто Query на трета задача. Общо взето проблема ми е, че трудно конвертирам sql query-та в LINQ или ламбда. Някой би ли ми показал как следното sql query:

select top(10) a.AddressText, t.Name, count(e.EmployeeID) as [EmployeesCount]
from Addresses a
join Employees e
on a.AddressID = e.AddressID
join Towns t
on a.TownID = t.TownID
group by a.AddressText, t.Name
order by [EmployeesCount] desc, t.Name asc
 ще стане LINQ?

Благодаря предварително!

0
ksevery avatar ksevery 35 Точки

Като цяло мога да ти кажа, че е грешно да се чудиш как SQL зявка ще я пренесеш към LINQ. Разбери просто какъв е резултата, който търсиш, след което си разгледай обектите, които са ти генерирани от Entity Framework, и след това вече си направи заявката. Виж какви методи имаш - Where(), Select(), GroupBy(), OrderBy() и т.н. Общо взето по време на този курс се отдалечи от SQL и мисли в контекста на кода как ще се случат нещата.

Иначе за да ти отговоря все пак на въпроса, ето ти заявката както е направена при мен:

Addresses.OrderByDescending(a =gt; a.Employees.Count)
                .ThenBy(a =gt; a.Town.Name)
                .Take(10)
                .Select(a =gt; new 
                { 
                    AddressText = a.AddressText, 
                    TownName = a.Town.Name, 
                    EmployeeCount = a.Employees.Count 
                })
                .ToList();

 

3
18/07/2015 16:43:22
Abraxas avatar Abraxas 47 Точки

Благодаря за съветите, колега. Наистина ми помогна това да се абстрахирам от sql и да погледна на linq и lambda + entity като на съвсем отделни неща. Като забравих за sql и видях на какво са способни linq и lambda измислих следното решение с linq:

var addresses = (from a in context.Addresses orderby a.Employees.Count descending, a.Town.Name ascending select new { Address = a.AddressText, TownName = a.Town.Name, EmployeesCount = a.Employees.Count }).Take(10).ToList();

 

0
18/07/2015 16:30:51
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.