0

日時列を文字列として変換するようにリンクします。これは、クエリに同じものを追加してデータベースで実行される 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: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 に含まれているかどうかを確認する方法はありますか。

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 とともに作成日をフィルター処理したいと思います。しかし、contains を使用できるように、datetime 列を文字列に変換できません。

上記の整数データ型に対して行ったことを達成する方法はありますか。

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%がそれほど重要なのか教えてください. そうであれば、 with のアプローチだけが.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 に答える