我将链接将Datetime列转换为字符串。这应该发生在数据库的例子中,如果我们使用System.Data.Objects.SqlClient.SqlFunctions
在所有的帖子建议,首先需要查询,然后我们需要选择。在select中,我们可以使用。tostring()。与其先获取记录,不如在获取时进行转换。
我的要求。我有实体雇员。
public class EmpEntities
{
public string Id { get; set; }
public DateTime CreatedDate { get; set; }
}
假设我的数据Emp-19, 2012-01-01 11:33:454Emp-17, 1999:06:06 12:44:898
我的搜索条件是20,在所有字段中任何员工都有20(包含)这是我需要过滤的属性列表包含需要检查。要做到这一点,我需要将我创建的日期列转换为linq中的字符串。
var query=
(from ee in entities.Employee
where ee.CreatedDate.Value.ToString().Contains("20")
select ee).ToList();
如果我们使用上面的一个,它将通过错误。
如果我们使用下面的代码就可以了。
var query=
(from emp in entities.Employee
select emp)
.AsEnumerable()
.Where(x=>x.CreatedDate.Value.ToString().Contains("20"));
我需要检查包含日期时间属性的实体。是否有办法将datetime属性转换为字符串并检查linq.
中的包含内容?我需要将我的datetime属性转换为字符串,然后我需要使用contains。
所以这里我的问题是我想在数据库级别过滤数据比如这样我正在准备员工id
var query= (from emp in entities.Employee.Where(x => System.Data.Objects.SqlClient.SqlFunctions.StringConvert((decimal?)x.Empid).Contains("20"))
select emp).ToList();
在SQL查询中的等价是。
SELECT 1 AS [C1], [Extent1].[name] AS [name] FROM [dbo].[Employee] AS [Extent1]
WHERE STR( CAST( [Extent1].[EmpId] AS decimal(19,0))) LIKE N'%5%'
在sql执行中,将整型转换为字符串,并在获取记录时执行条件。
同样,我想过滤创建的日期和empid。但是我不能将datetime列转换为字符串,以便我可以使用contains。
是否有任何方法可以实现上面的一个我为整数数据类型所做的。
对这个问题有一个简短的回答:不。但我认为sgmoore指出您的方法中的缺陷是正确的。DateTime
的字符串表示可以在任何地方包含字符串,那么这有多有用?
看起来你只想选择日期>= 2000-01-01
,这可以通过
var d1 = new DateTime(2000,1,1);
var query = from emp in entities.Employee
where emp.CreatedDate >= d1
select emp;
请告诉我,如果这不符合你的意图,为什么匹配LIKE %20%
会如此重要。如果是这样,则只有.AsEnumerable()
的方法才能完成工作。
使用Linq2Sql,您可以执行以下操作:
var query=
(from ee in entities.Employee
where SqlMethods.Like(ee.CreatedDate.Value.ToString() , "%20%")
select ee).ToList();
我要问,为什么?我很难想象为什么有人会想要这样的东西?
我想你知道这将匹配日期
1900-01-01 20:00:00
1900-01-01 00:00:20
1900-01-20 00:00:00
1920-01-01 00:00:00
2000-01-01 00:00:00
等等