Когда вы получаете ошибку такого рода, вам нужно выполнить все оценки вне запроса linq и передать значения в виде переменных.
проблема с вашим запросом состоит в том, что thetag.ProductNames.Any()
находится вне контекста.
Эта оценка не преобразуется в SQL, поскольку она не является строкой / guid или int.
Вам потребуется запросить этот объект в запросе и выполнить оценку на основе этого объекта.
Я не уверен, что это было ясно.
Вам нужно будет сделать что-то вроде
var query1 = (from x in tags where x.tagID = id select x.ProductNames)
.SelectMany(...)
Выбор многих из-за того, что вы выбираете коллекцию ProductNames
инужно вернуть его как плоский набор / коллекцию, чтобы вы могли сделать .Any()
для него в следующем запросе.
Затем используйте это и выполните query1.Any(logic)
decimal total = myentities.PurchaseRecords.
Where(x => query1.Any
(a => a.FullName == x.ProductName.FullName))
.Sum(s => s.Amount);
Делая это, вы останетесь в linq для сущности и не преобразуете в linq для объектов.
ForEach
не вариант, так как он будет выполнять итерацию по коллекции.