从数据库中提取长列表
本文关键字:列表 提取 数据库 | 更新日期: 2023-09-27 17:58:47
我有一个包含长列表的对象。在数据库中,我将其存储为用逗号分隔的字符串。每当我进行读/写操作时,我总是分解或连接这个字符串,我希望将这一步从业务逻辑转移到查询。这就是我尝试的查询:
var TheData = (from l in MyDC.Table
....
select new MyModel()
{
TheListOfLongs = (from x in l.StringOfLongs.Split(',')
select Convert.ToInt64(x)).ToList<long>(),
SomeObjectProp = ...
}).ToList();
我得到的错误是:
方法"System.String[]Split(Char[])"不支持转换为SQL。
如何修复我的查询以使其工作?
您正试图在DB上执行Split操作,该操作的回复是:"我不知道如何做您刚才让我做的事情!"。
解决方案是先调用.ToList()
,然后再调用select new Model()
编辑:延期的返工和修改-意外地将拆分移动到错误的位置-现在应该是
var TheData = (from l in MyDC.Table select new {
stringLong = l.StringOfLongs,
OtherProps = //...
})
.AsEnumerable()
.Select(x => new Model
{
TheListOfLongs = x.stringLong
.Split(',')
.Select(y => Convert.ToInt64(y)
.Cast<long>(),
OtherProps = // ...
});
如果你想在查询语法中使用这些,它看起来是这样的:
var TheData = (from l in MyDC.Table select new {
stringLong = l.StringOfLongs,
OtherProps = //...
}).AsEnumerable();
var RealTheData = (from l in TheData select new Model
{
TheListOfLongs = (from s in l.stringLong
.Split(',') select Convert.ToInt64(s).Cast<long>(),
OtherProps = // ...
});
var TheData = MyDC.Table
.Where(...)
// optionally .Select(l => new { l.StringOfLongs, l.SomeObjectProp })
.AsEnumerable() // move execution to memory
.Select(l => new Model() {
TheListOfLongs = l.StringOfLongs.Split(',')
.Select(x => Int64.Parse(x))
.ToList(),
SomeObjectProp = l.SomeObjectProp
}).ToList();