Я использую этот запрос в LINQPad. Он работает, за исключением того, что ProductSeries имеет дубликаты записей.LINQ Outer Join имеет дубликаты
var query = from etaRecord in EtaRecord_0140
join productSeriesRecord in ProductSeries
on etaRecord.ProductSeriesID equals productSeriesRecord.ProductSeriesID
into productSeriesGroup
from productSeries in productSeriesGroup.DefaultIfEmpty()
where etaRecord.State == "A"
select new { EtaRecord = etaRecord, ProductSeriesRecord = productSeries };
query.Dump();
Я попытался с помощью FirstOrDefault()
вместо DefaultIfEmpty()
, но я получаю эту ошибку:
An expression of type 'LINQPad.User.ProductSeries' is not allowed in a subsequent from clause in a query expression with source type 'System.Linq.IQueryable'. Type inference failed in the call to 'SelectMany'.
Как я могу получить FirstOrDefault()
для ProductSeries так, что есть только одна строка для каждого EtaRecord?
.NET скрипку здесь: https://dotnetfiddle.net/kRrold
левое внешнее объединение может возвращать дубликаты, показать, что вы ожидаете и то, что текущий вывод –
В настоящее время запрос не содержит дубликатов, поэтому я не могу показать плохой результат. Проблема в том, что данные могут измениться, и тогда в будущем будут дубликаты. Мне нужно защититься от этого. Мне нужен только один ряд за etaRecord. И что etaRecord может иметь нулевой ProductSeries или только один ProductSeries, даже если их несколько. –
Добавил ссылку .NET скрипта в мой пост. –