数据类型linq出错

时间:2014-01-15 14:17:47

标签: linq

有一个请求: “带两个年龄较大(最大年龄)的孩子,完成他们在幼儿园的住宿”

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参数必须具有数字公共类型

我哪里出错了??

3 个答案:

答案 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));

EntityFunctions

答案 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();