LINQ在List中获取项目
本文关键字:获取 项目 AttributeValuePair List LINQ | 更新日期: 2023-09-27 18:12:37
我有一个表在我的数据库中,除了其他列(其中之一是一个UniqueIdentifier),我也有一个列,我有一个JSON数组字符串的值像这样(格式化):
[
{
"AttributeId": "fe153d69-8ac1-6e0c-8793-ff0000804eb3",
"AttributeValueId": "64163d69-8ac1-6e0c-8793-ff0000804eb3"
},
{
"AttributeId": "00163d69-8ac1-6e0c-8793-ff0000804eb3",
"AttributeValueId": "67163d69-8ac1-6e0c-8793-ff0000804eb3"
}
]
然后我有这个AttributeValuePair
类,它将允许我在代码上读取这些数据:
public class AttributeValuePair
{
public AttributeValuePair();
public Guid AttributeId { get; set; }
public Guid AttributeValueId { get; set; }
}
每当我从这个表中获得一个项目列表时,我希望能够仅基于一个AttributeValueId过滤结果数组,并仅获得匹配的项目,而不依赖于任何其他属性的值。
既然在代码上,要读取这些属性集合,我必须有一个List<AttributeValuePair>
,我如何在LINQ中获得特定AttributeValueId存在的项目?
List<AttributeValuePair> attributeValuePairs = serializer.Deserialize<List<AttributeValuePair>>(item.Variant);
我已经沉浸在其中两个小时了,似乎找不到逃避的办法。
编辑
更清楚的问题,我要做的是,从一个List<ProductVariation>
,得到属性"部分"的可能值,当属性"天"是指定的值。我在使用serializer
构建LINQ语句时遇到了很多麻烦。
//This code is wrong, I know, but I'm trying to show what I want
result = model.ProductVariations.Find(x, new {serializer.Deserialize<List<AttributeValuePair>>(item.Variant).Where(valuePair => valuePair.AttributeId == attributeId)});
你能试试吗
attributeValuePairs.Where(valuePair => valuePair.AttributeId == new Guid("SomeValue"));
这个问题的答案实际上比之前预期的要简单得多:
public string SelectedVariation(string mealsAttribute, string portionsAttribute, string product)
{
Guid productId = new Guid(product);
CatalogManager catalogManager = CatalogManager.GetManager();
EcommerceManager ecommerceManager = EcommerceManager.GetManager();
RegisterOrderAccountFormModel model = new RegisterOrderAccountFormModel();
model.Product = catalogManager.GetProduct(productId);
List<ProductVariation> productVariationsCollection = catalogManager.GetProductVariations(productId).ToList();
//This is the really interesting part for the answer:
return productVariationsCollection.Where(x => x.Variant.ToLower().Contains(mealsAttribute.ToLower()) && x.Variant.ToLower().Contains(portionsAttribute.ToLower())).FirstOrDefault().Id.ToString();
}