Если вы недавно установили или обновили пакет Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, дважды проверьте, что версии этого пакета, на которые ссылается ваш проект, указывают на правильную и ту же версию этого пакета:
ProjectName.csproj
убедитесь, что присутствует тэг <Import>
для Microsoft.CodeDom.Providers.DotNetCompilerPlatform
и указывает на правильную версию. ProjectName.csproj
убедитесь, что тег <Reference>
для Microsoft.CodeDom.Providers.DotNetCompilerPlatform
присутствует и указывает на правильную версию, как в атрибуте Include
, так и на потомке <HintPath>
. web.config
проекта убедитесь, что присутствует тэг <system.codedom>
, и что его дочерние <compiler>
теги имеют одну и ту же версию в свой атрибут type
. По какой-то причине в моем случае обновление этого пакета с 1.0.5 до 1.0.8 вызвало <Reference>
в .csproj
, чтобы его Include
указывал на старую версию 1.0.5.0 (которую я удалил после обновления пакета), но все остальное указывало на новую и правильную версию 1.0.8.0.
Как насчет:
var res = from c in customers
where !orders.Select(o => o.CustomerID).Contains(c.CustomerID)
select c;
Другая опция состоит в том, чтобы использовать:
var res = from c in customers
join o in orders
on c.CustomerID equals o.customerID
into customerOrders
where customerOrders.Count() == 0
select c;
Вы использующий LINQ для SQL или чего-то еще, btw? Различные ароматы могут иметь различные "лучшие" способы сделать его
var res = (from c in orders where c.CustomerID == null
select c.Customers).ToList();
или делают кроме ()
Если это поддерживается базой данных, попытайтесь использовать свойства навигации (если Вам определили их):
var res = from c in customers
where !c.Orders.Any()
select c;
На Northwind, это генерирует TSQL:
SELECT /* columns snipped */
FROM [dbo].[Customers] AS [t0]
WHERE NOT (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[Orders] AS [t1]
WHERE [t1].[CustomerID] = [t0].[CustomerID]
))
, Который делает задание вполне хорошо.