如何将字符串转换为Iqueryable中的小数



好吧,这听起来比以前容易!我有一个表,其中包含存储为字符串值的数量。但是我的代码需要它们作为十进制值,并且需要将它们铸成十进制,作为Iqueryable正在制作的查询的一部分!因此,不可能使用.tolist()。演员需要由其背后的数据库完成。
这种iQueryable基本上是Iqueryables上链的一部分,因此下一个查询可能需要在此数量上添加过滤器以做出较小的选择,或者用数量进行其他数学。进入的查询可能已经是所有数据的子选择。
编辑:让我解释一下我在这里工作的内容:我有类似的写作方法:

public static IQueryable<PriceList> GetPriceList(this IQueryable<PriceData> query) => query.Select(d => new PriceList{Name = d.Item.Name, Price = decimal.Parse(d.Value)}).AsQueryable();

和Pricedata是包含一些字段的记录,价格为字符串值。但是,认证主义者的记录需要十进制。
然后,可以通过另一种扩展方法将此方法用于进一步的选择,数学等。只是十进制。

正如已经评论过的,您不支持您要做的。

  • 最好的选择是将数据库字段类型更改为实际代表的内容:货币/小数
  • 如果不可能,请与人交谈,这有能力使其成为可能

如果不可能,我可以想象的最接近的解决方法是:

public class PriceList
{
    public string Price { get; set; }
    public decimal ParsedPrice => decimal.Parse(Price);
}

,然后:

.Select(d=>new PriceList
{
    Price = d.Price
});

但是,您不能在ParsedPrice上执行任何dboperations。另请注意,您不能在EF6中使用带有参数的构造函数。那将是您将遇到的下一个问题。

EF最适合Crud。对于您可能应该拥有的服务,您可能应该拥有一项服务,这只能获取您只需要的数据,将其实现并从中提供DTO或BusinessObject。

类似的东西:

public class MyService
{
    public IEnumerable<PriceList> GetPriceList(Expression<Func<MyEntity, bool>> predicate)
    {
        var data = _context.MyEntity.Where(predicate).ToList();
        foreach (var item in data)
        {
            var dto = new PriceList {...}
            yield return dto;
        }        
    }
}

最新更新