Jestem całkiem nowy w LINQ i nie mogę pogodzić się z pewną niekonsekwencją w zachowaniu. Każdy cenny wkład byłby bardzo doceniany. Widzę podobne problemy na SO i gdzie indziej, ale wydaje się, że nie pomagają.LINQ - "Nie można przetłumaczyć wyrażenia" z poprzednio używanym i sprawdzonym warunkiem zapytania
Mam bardzo prostą konfigurację - tabelę firmową i tabelę adresów. Każda firma może mieć 0 lub więcej adresów, a jeśli> 0 należy podać adres główny. Próbuję obsłużyć przypadki, w których jest 0 adresów, używając zewnętrznego sprzężenia i zmieniając odpowiednio instrukcję select.
Uwaga: Aktualnie wiążę dane wyjściowe bezpośrednio z GridView, więc chciałbym zachować wszystkie przetwarzanie w zapytaniu.
Poniższy CZY pracy
IQueryable query =
from comp in context.Companies
join addr in context.Addresses on comp.CompanyID equals addr.CompanyID into outer // outer join companies to addresses table to include companies with no address
from addr in outer.DefaultIfEmpty()
where (addr.IsMain == null ? true : addr.IsMain) == true // if a company has no address ensure it is not ruled out by the IsMain condition - default to true if null
select new {
comp.CompanyID,
comp.Name,
AddressID = (addr.AddressID == null ? -1 : addr.AddressID), // use -1 to represent a company that has no addresses
MainAddress = String.Format("{0}, {1}, {2} {3} ({4})", addr.Address1, addr.City, addr.Region, addr.PostalCode, addr.Country)
};
ale ten wyświetla pusty adres w GridView jako ", ,()
"
Więc aktualizowane pole MainAddress być
MainAddress = (addr.AddressID == null ? "" : String.Format("{0}, {1}, {2} {3} ({4})", addr.Address1, addr.City, addr.Region, addr.PostalCode, addr.Country))
i teraz otrzymuję błąd Could not translate expression
i kilka automatycznie wygenerowanych kodów spewey w pliku erro r co oznacza dla mnie bardzo mało.
Warunek dodany do MainAddress nie różni się od warunków pracy na AddressID, więc czy ktoś może mi powiedzieć, co się tutaj dzieje?
Każda pomoc bardzo ceniona.
może chcieć dodać "spewey automatycznie wygenerowany kod" na pytanie. – Bert