有一个请求: “带两个年龄较大(最大年龄)的孩子,完成他们在幼儿园的住宿”
var s = db.Child.Max(e => (DateTime.Today - e.Birthday));
foreach (var n in db.Child.Where(e => (DateTime.Today - e.Birthday) == s).Take(2))
db.DeleteObject(n);
“生日” - 数据类型=> “日期时间”。
错误:DbArithmeticExpression参数必须具有数字公共类型
我哪里出错了??
答案 0 :(得分:2)
你过分复杂了。最年长的孩子是出生的孩子......
所以
var oldestChildren = db.Child.OrderBy(c => c.Birthday).Take(2).ToList();
//if "complete they stay in kindergarten means delete
foreach (var child in oldestChildren)
db.DeleteObject(child);
答案 1 :(得分:0)
EF不支持使用DateTime进行算术运算。
var s = db.Child.Max(e => EntityFunctions.DiffDays(DateTime.Today - e.Birthday));
答案 2 :(得分:0)
从foreach语句中拉出where语句并检查数据库DataType。
class Program
{
static void Main(string[] args)
{
List<Test> Tests = new List<Test>();
Tests.Add(new Test(new DateTime(2014, 01, 01)));
Tests.Add(new Test(new DateTime(2013, 01, 01)));
Tests.Add(new Test(new DateTime(2012, 01, 01)));
Tests.Add(new Test(new DateTime(2011, 01, 01)));
Tests.Add(new Test(new DateTime(2010, 01, 01)));
Tests.Add(new Test(new DateTime(2009, 01, 01)));
Tests.Add(new Test(new DateTime(2008, 01, 01)));
var s = Tests.Max(e => (DateTime.Today - e.Birthday));
var d =Tests.Where(e => (DateTime.Today - e.Birthday) == s).Take(2);
}
}
public class Test
{
public DateTime Birthday { get; set; }
public Test(DateTime dateTime)
{
Birthday = dateTime;
}
}
但如果你想要两个最大的孩子,我认为你的逻辑是错误的。如果他们的出生日期是相同的话,这会给你年龄最大的孩子,看看
var oldestChildren = db.Child.OrderBy(c => c.Birthday).Take(2).ToList();