2
(from sms in db.sms
                where sms.NeedModeration == true && sms.ReplyStatus == "test" && **sms.date.Value == date**
                select new 
                 {
                     SMSID = sms.SmsID,
                     Body = sms.body,
                     Date=sms.date,
                     ReplyStatus = sms.ReplyStatus
                 }).AsEnumerable().Select(x=>new VMSMS{
                     SMSID=x.SMSID,
                     Body=x.Body,
                     Date= x.Date.Value,
                     ReplyStatus = x.ReplyStatus
                 })

指定されたコードは正常に動作しますが、DATETIME のようなタイプの日付部分のみを一致させたい部分では

 sms.date.Value.Date == date.Date

しかし、それは正しく動作しません。次のエラーが表示されます

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

では、LINQで DateTime型から Date 部分を抽出する方法を教えてください。

これがSMS ViewModelコードです....

public class VMSMS
{
    public long SMSID { get; set; }
    public string SMS { get; set; }
    public int? SPOID { get; set; }
    public string Body { get; set; }
    public string EmployeeName { get; set; }
    [IgnoreDataMember]
    public DateTime Date { get; set; }        
    public bool? IsRead { get; set; }
    public string DoctorCode { get; set; }
    public string ReplyStatus { get; set; }
}
4

2 に答える 2

0

助けてくれてありがとう。ついに私はそれが次のように行われるべきであるという答えを得ました

EntityFunctions.TruncateTime(sms.date.Value) == EntityFunctions.TruncateTime(date)

日時から時刻を切り捨てます。

于 2012-10-12T05:51:18.973 に答える
0

Date プロパティに IgnoreDataMember があるため、モデルにマップされません。

したがって、投影を行った後、Linq-to-Object レベルで比較を行う必要があります。

于 2012-10-11T11:54:38.050 に答える