#c# #mongodb #linq
Вопрос:
У меня есть модель продукта, которая содержит список, и мне нужно найти продукт и отфильтровать его в соответствии с языком.
return Collection.Find(p => p.ProductValues.Where(pv => pv.Lang == lang)).toList();
И ошибка, которую я получаю, заключается в следующем
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<TestMongodb.Entities.ProductValue>' to 'bool'
Мои модели
public class Product : BaseEntity
{
public Product(string price, string date, List<ProductValue> value) =>
(Price, Date, ProductValues) = (price, date, value);
public string Price { get; set; }
public string Date { get; set; }
[BsonElement("value")]
public List<ProductValue> ProductValues { get; set; }
}
и
public class ProductValue
{
public ProductValue(string lang, string name, string description) =>
(Lang, Name, Description) = (lang, name, description);
[BsonElement("lang")]
public string Lang { get; }
[BsonElement("name")]
public string Name { get; }
[BsonElement("description")]
public string Description { get; }
}
Комментарии:
1. Я не совсем понимаю ваш вопрос.
Find
возвращает первый соответствующий экземпляр. Почему вы пытаетесь вызватьToList
один экземпляр?
Ответ №1:
Вместо Where()
этого используйте Any()
,
return Collection.Find(p => p.ProductValues.Any(pv => pv.Lang == lang));
Почему Any()
кончено Where()
?
Where(<predicate>)
предложение используется для фильтрации на основе переданного ему предиката. Он возвращает набор новых отфильтрованных записей вместоtrue/false
значений.
Any(<predicate>)
: Any()
возвращает true/false
, если предикат удовлетворяет условию. `
Теперь Find возвращает документ на основе условия, которое возвращает логическое значение true, а не новый список. Именно по этой причине мы использовали Any()
вместо Where()
Комментарии:
1. Это не работает, я все еще получаю несколько языков, мне нужно отфильтровать список и получить только правильный язык. Пример: «Значения продукта»: [ { «язык»: «ru», «имя»: «zzzz», «описание»: «строка» }, { «язык»: «ru», «имя»: «xxxx», «описание»: «строка» } ],
2. Не могли бы вы, пожалуйста, указать, что является вводом и какой вывод вы ожидаете
3. @AzadSamedov, что вы подразумеваете под правильным языком, который здесь является правильным языком?