Ja jag är helt säker på att problemet nog ligger någon annanstans :) Eftesom IList implementerar IEnumerable så räcker att du gör likande detta:Sv:Linq problem
Och eftersom jag dessutom hittat det nu (problem med NULL i databasen) så låg felet nog någon annastans :)
Men nu när jag ändå har dig på tråden, så tänkte jag ställa en fråga. Från mitt Repository (LINQ) så skickar jag tillbaka en IEnumerable<T> lista, men för att det skall bli en lista och inte en IQuerayble<T> så måste jag köra .ToList<T> på min LINQ-Sats och sedan skicka tillbaka den som .AsEnumerable<T>.
<code>
IList<DomainModel.Customer> list = (from customer in context.Customers
select new DomainModel.Customer {...}).ToList<DomainModel.Customer>();
return list.AsEnumerable<DomainModel.Customer>();
</code>
Och jag måste säga att det känns lite i hjärtat att jag först måste göra om det till en IList<T> och sedan göra om det via .AsEnumerable<T> för att få tillbaka min IEnumerable<T>. Hur brukar du göra för att din LINQ sats skall exekveras i Repositoryn och inte någon annanstans i koden.
Dessutom så undrar jag hur ni löser Save-problematiken med LINQ TO SQL. Jag måste ju själv hålla reda på om mitt objekt skall göra en INSERT eller en UPDATE. Jag funderar på att låta logiken för detta ligga in min domainservices och sedan ha INSERT och UPDATE som metoder på mitt repository. Men om jag byter från LINQ till någon ORM som har logik för detta inbyggt så bör ju mitt repository istället endast ha en SAVE metod. Men om jag bara har en SAVE metod för mitt LINQ Repository så kommer jag ju lägga logik i repositoryn (alltså kolla om det är INSERT/UPDATE som skall göras) och det är inte riktigt snyggt.
Hur gör ni andra?
- MSv: Linq problem
static IEnumerable<Customer> GetCustomers()
{
//..
return (from c in context.Customers
orderby c.CompanyName
select c).ToList();
}
När det gäller Save och Update så gillar jag att ha dom två separata för att göra koden mer tydlig. Jag har varit inne på Save bara och ha den som både "create" och "update", men jag tycker det inte skapar bra tydlighet. Jag vill nämligen att koden ska prata med mig, asså säga att det är en "Create" den gör eller en "Update" så jag kan enkelt se det.