0

LinqPadでクエリを実行すると例外が発生しました

var allNewsInADay= (from t in Tnews where t.SendTime.Value.Year==2012 && 
    t.SendTime.Value.Month==8  && t.SendTime.Value.Day==20 select t);
allNewsInADay.Dump();

例外:メンバーアクセス'System.DateTimeValue'はサポートされていません

.HasValueプロパティを使用する場合:NotSupportedException: The member access 'Boolean HasValue' is not supported

--私はMySqlを使用しており、私の目的は特定の日にすべてのレコードを取得することです。

4

2 に答える 2

4

代わりにSqlFunctions.DatePartを使用できます

利用方法 :

where SqlFunctions.DatePart(t.SendTime, "yy") == 2012 &&
      SqlFunctions.DatePart(t.SendTime, "mm") == 8 &&
      SqlFunctions.DatePart(t.SendTime, "dd") == 20)

また

var dt = new DateTime(2012, 8, 20);

...
where t.SendTime == dt

または正規関数(すべてのプロバイダーでサポート)

 where EntityFunctions.Year(t.SendTime) == 2012

たぶん、最初の述語としてnullチェック t.SendTime != null(または)t.SendTime.HasValue

必要だろう

または単に削除してValueください!

于 2012-09-07T08:09:16.810 に答える
0
var rslt= (from t in Tnews 
           where t.SendTime.HasValue 
              && t.SendTime.Value.Year==2012 
              && t.SendTime.Value.Month==8  
              && t.SendTime.Value.Day==20 
           select t);

また

var someDate = new DateTime(2012,8,20);
var rslt= (from t in Tnews 
           where t.SendTime.HasValue  
              && t.SendTime.Value.Date==someDate 
           select t);

役立ちます?

upd:あなたは悪いことを試みました。ちょうどこれを実行しました:

class Program
{
    public class TNews
    {
        public DateTime? SendTime { get; set; }
        public string Id;
    }
    static void Main(string[] args)
    {
        var tnews = new TNews[]
        {
            new TNews { SendTime = new DateTime(2012,8,20), Id="2012-08-20" },
            new TNews { SendTime = new DateTime(2012,8,20,12,20,0), Id="2012-08-20 12:20" },
            new TNews { SendTime = new DateTime(2012,8,21), Id="2012-08-21" },
            new TNews { SendTime = null, Id="null" },
        };

        var someDate = new DateTime(2012, 8, 20);
        var rslt = (from t in tnews
                    where t.SendTime.HasValue 
                       && t.SendTime.Value.Date == someDate
                    select t);

        foreach (var t in rslt)
        {
            Console.WriteLine(t.Id);
        }
    }
}

出力は次のとおりです。

2012-08-20
2012-08-20 12:20
Press any key to continue . . .
于 2012-09-07T08:20:29.907 に答える