【发布时间】:2012-04-21 02:57:30
【问题描述】:
我遇到了问题,因为我正在尝试连接一个旧的第三方数据库并从中检索数据,该数据库使用现已弃用的文本字段。但是,我无法更改数据库字段,因此当我尝试通过 LINQ 返回数据时会出现问题。示例代码如下:
var query = from s in db.tSearches
join c in db.tCompanies on s.CompanyGUID equals c.GUID
join cl in db.tCompanyLocations on s.LocationGUID equals cl.GUID
join st in db.tSearchTypes on s.SearchTypeGUID equals st.GUID
where s.DateClosed == null
select new
{
Id = s.GUID,
Type = st.GUID,
Location = cl.LocationName,
Company = (s.Confidential) ? String.Empty : c.CompanyName,
DateOpened = s.DateOpened,
Notes = s.PlacementNotes,
Closed = s.DateClosed != null
};
在我最终尝试这样做之前,会对此信息进行更多过滤:
return query.Select(x => new VacancySummary
{
Id = x.Id,
Departments = "",
Location = x.Location,
Company = x.Company,
DateOpened = x.DateOpened,
Notes = x.Notes,
Closed = x.Closed
}).Distinct().Skip(skip).Take(take);
然后得到上面的异常。我宁愿不必先执行整个 SQL 语句并在运行 Distinct 之前返回结果,因为如果每个用户检索每个搜索的所有记录,服务器带宽会降低性能,这就是为什么只有一部分返回数据。
有什么想法吗?
【问题讨论】:
-
如果它已被弃用,你为什么不直接拉那个字段?
-
@kh25:你能在那个数据库中创建视图吗?我建议使用
text列在表顶部创建一个视图,除了将text列转换为varchar(max),然后使用LINQ 从视图中查询。 -
@Cory 不幸的是,现阶段我无法修改数据库。如果我有,我会将字段更改为 varchar。至于作为副本,由于没有对数据库的访问权限,我无法使用相同的解决方案。这是我们无法控制的第三方数据库。
-
如果你这样做
Notes = s.PlacementNotes.ToString();,它会在底层 SQL 调用中足够早地转换它吗?
标签: c# sql-server linq