1

私はLinqの初心者であり、以下のクエリは「System.DateTimeを認識しません」というエラーを返し続けます。解析と変換を試しましたが、どちらも機能しません。これが私の質問です:

mrcEntities context = GetContext();

        var query = from c in context.tblClients
                    where (c.FirstName != null || c.LastName != null)
                       && c.EligibilityDate >= DateTime.Parse("10/01/2011")
                       && c.EligibilityDate <= DateTime.Parse("04/30/2012")
                      orderby c.ClientID
                    select new
                    {
                        ClientID = c.ClientID,
                        FirstName = c.FirstName,
                        LastName = c.LastName,
                        MiddleName = c.MidName,
                        SSN = c.SSN,
                        DOB = c.DOB,
                        Sex = c.Gender,
                        Ethnic = c.EthnicCode
                    };

        clientRowCnt = query.Count();

どんな助けでもいただければ幸いです。

4

2 に答える 2

6

これは、EF が DateTime.Parse をストアで使用できる関数に変換できないためです。DateTime.Parse() への呼び出しの結果を置き換えて、それらの変数をクエリで使用すると、正常に動作するはずです。

var from = DateTime.Parse("10/01/2011");
var to = DateTime.Parse("04/30/2012");
var query = from c in context.tblClients
                    where (c.FirstName != null || c.LastName != null)
                       && c.EligibilityDate >= from
                       && c.EligibilityDate <= to
                      orderby c.ClientID
                    select new
                    {
                        ClientID = c.ClientID,
                        FirstName = c.FirstName,
                        LastName = c.LastName,
                        MiddleName = c.MidName,
                        SSN = c.SSN,
                        DOB = c.DOB,
                        Sex = c.Gender,
                        Ethnic = c.EthnicCode
                    };

        clientRowCnt = query.Count();
于 2012-04-30T13:57:28.690 に答える
3

クエリの外で日付を解析するだけです。または、コンストラクターを使用して、日付を解析することさえせずに日付を作成します (値はすでにわかっています。

DateTime start = DateTime.Parse("10/01/2011");
DateTime emd = DateTime.Parse(04/30/2012);

var query = from c.....

または使用:

DateTime start = new DateTime(2011, 10, 01);
DateTime end = new DateTime(2012, 04, 30);

var query = from c.....

データが取得された後にその部分がクライアント側で実行されるため、クエリの射影部分の文字列を安全に解析することもできます。それで

var query = from c...
select
    new {
        EligibilityDate = Datetime.Parse(c.EligibilityDate)
    }

解析された値が選択基準で必要な場合、DateTime 値として提供する必要がある場合のみです。

はるかに優れた解決策は、データベース スキーマを修正するか、計算列を既存のスキーマに追加して、サーバーで解析を行い、正しい型指定された列を公開することです。

于 2012-04-30T13:57:36.740 に答える