0

我将链接以将日期时间列转换为字符串。如果我们使用 System.Data.Objects.SqlClient.SqlFunctions 将在数据库中执行相同的查询并在数据库中执行,这应该发生在数据库示例中。

在所有建议的帖子中,首先需要查询然后我们需要选择。在选择中,我们可以使用 .ToString()。我不想先获取记录,而是想在获取时进行转换。

我的要求。我有实体员工。

public class EmpEntities
{
 public string Id { get; set; }
 public DateTime CreatedDate { get; set; }
}

假设我的数据 Emp-19,2012-01-01 11:33:454 Emp-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 中的包含。

我需要将我的日期时间属性转换为字符串,然后我需要使用包含。

所以这里我的问题是我想在数据库级别过滤数据,例如我正在为员工 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 一起过滤创建日期。但我无法将日期时间列转换为字符串,以便我可以使用包含。

有什么方法可以实现我对整数数据类型所做的上述方法。

4

2 回答 2

1

对此有一个简短的回答:不。但我认为 sgmoore 正确地指出了您方法中的缺陷。a 的字符串表示形式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()才能完成这项工作。

于 2013-01-17T09:47:27.070 回答
0

使用 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

等等等等

于 2013-01-16T10:27:17.700 回答