如何在Linq to Entities中模拟.Substring()方法

如何在Linq to Entities中模拟.Substring()方法,linq,linq-to-entities,Linq,Linq To Entities,我有一个疑问: Course c = db.Courses.Find(id); var pics = from pic in db.PersonnelInCourses where pic.PersonnelID == User.Identity.Name && pic.Course.TitleID == c.TitleID && pic.Course.BeginDate.Substring(0, 4) == Persian

我有一个疑问:

Course c = db.Courses.Find(id);
var pics = from pic in db.PersonnelInCourses
    where pic.PersonnelID == User.Identity.Name &&
        pic.Course.TitleID == c.TitleID &&
        pic.Course.BeginDate.Substring(0, 4) == PersianDateTime.Now.Year.ToString()
    select pic;
我发现L2E不支持
.Substring()
方法。那么,我怎样才能得到我想要的

tanx试试看

Course c = db.Courses.Find(id);
var pics = from pic in db.PersonnelInCourses
    where pic.PersonnelID == User.Identity.Name &&
        pic.Course.TitleID == c.TitleID &&
        pic.Course.BeginDate.Substring(0, 4).Equals(PersianDateTime.Now.Year.ToString()) 
    select pic;
我不知道是什么类型的开始??我知道它是DateTime,然后调用ToString()。

找到它

string year = PersianDateTime.Now.Year.ToString();           
Course c = db.Courses.Find(id);
var pics = from pic in db.PersonnelInCourses
   where pic.PersonnelID == User.Identity.Name &&
       pic.Course.TitleID == c.TitleID && 
       pic.Course.BeginDate.Contains(year)                         
   select pic;

谢谢大家的帮助……

使用“Contains”的危险在于它会搜索整个字符串。根据日期的格式,这可能会产生问题。例如:如果您的日期格式为“yyyyMMdd”,则不太可能出现问题(除非您计划在1232年之前插入日期)。如果它是“yyyyMMddHHmmss”,则预期会出现随机且难以找到的bug。

BeginDate本身就是一个字符串。nedd怎么做?你在哪里发现L2E不支持子字符串?异常文本!还有其他帖子,你有什么错误吗?没错!例外…你的例外是什么?如果可能的话,更改数据库并将日期存储为DateTime。在服务/UI中执行任何到本地日历的转换。我认为这不会对我造成问题,因为我所有的日期格式都是yyyy-mm-dd。因为!事实上,在这个prj中,我们与时间无关,我们以前制作的代码使用字符串。。。我知道这可能不是一个好的设计,但在某些情况下,第一次交货时间是第一优先。。。