>我有以下代码片段
IQueryable<RssItem> rssItems = from prodotti prodotto in tuttiProdotti
join marca in tutteMarche on prodotto.marca equals marca.id
where prodotto.eliminato == 0
orderby prodotto.id ascending
select new GoogleShoppingRssItem
{
Author = AUTHOR,
//Availability = prodotto.disponibilita > 0 ? AvailabilityType.instock : AvailabilityType.outofstock,
//Availability = AvailabilityType.instock,
Title = prodotto.titolo,
};
当可用性行的第一个版本未注释时,我得到了ArgumentException
,说value
不属于Edm.Int32
类型。我认为这与prodotto.disponibilita
属性有关,该属性int?
(但数据库中不存在null
值)。第二个版本不检查产品数量,会引发相同的异常。
只有在注释了可用性设置的第二个版本之后,代码才最终起作用并评估了表达式。
枚举定义如下:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[XmlType(Namespace="http://base.google.com/ns/1.0")]
[XmlRoot("availability", Namespace="http://base.google.com/ns/1.0", IsNullable=false)]
public enum AvailabilityType {
/// <remarks/>
[XmlEnum("in stock")]
instock,
/// <remarks/>
[XmlEnum("available for order")]
availablefororder,
/// <remarks/>
[XmlEnum("out of stock")]
outofstock,
/// <remarks/>
preorder,
}
在 LINQ select 语句中设置 enum
属性时,我应该了解些什么吗?
关于在 LINQ select 语句中设置枚举属性,我应该了解什么吗?
是的。EF4 不支持枚举,不能在 Linq 到实体查询中使用枚举。如果在 Linq-to-Objects 查询中使用它们,它应该可以工作,因此请尝试以下操作:
IQueryable<RssItem> rssItems = (from prodotto in tuttiProdotti
join marca in tutteMarche on prodotto.marca equals marca.id
where prodotto.eliminato == 0
orderby prodotto.id ascending
select prodotto).ToList() // Now you switched to L2O
.Select(x => new GoogleShoppingRssItem
{
Author = AUTHOR,
Availability = x.disponibilita > 0 ? AvailabilityType.instock : AvailabilityType.outofstock,
Title = x.titolo,
});