LinQ查询 - 不能使用Date作为其非原始EDM类型。也无法将DateTime转换为字符串

时间:2018-03-31 14:38:31

标签: c# linq

我在linQ查询下面遇到错误:
LINQ to Entities无法识别方法'System.String ToString(System.DateTime)'方法,并且此方法无法转换为商店表达式。

var query =   from i in Expenditure
              join d in Department on i.DepartId equals d.dID
              where i.Status == "Audit"
              group i by new { i.InvoiceId, d.Title, i.InvoiceDate } into g
              select new
              {
                id = g.Key.InvoiceId,
                txt = g.Key.Title + " // " + g.Key.InvoiceId + " // " + Convert.ToString(g.Key.InvoiceDate)
              };

我想要txt输出如下:

健康// Inv001 // 12-03-2018
教育// Inv002 // 23-03-3018

问题在于我最初写的InvoiceDate(Datetime)字段(没有转换)为:g.Key.InvoiceDate
但我收到错误:无法将类型'System.DateTime'强制转换为'System.Object'。 LINQ to Entities仅支持转换EDM原语或枚举类型。

有人能建议一个简单的解决方案吗?感谢。

2 个答案:

答案 0 :(得分:1)

而不是在数据库中组装<select id="s"> <option>1 Foo</option> <option>2 Foo</option> <option>3 Foo</option> <option>4 Foo</option> </select> <button type="button" id="b1" data-index="-1">Change No Selection</button> <button type="button" id="b2" data-index="0">Change First Selection</button>并强制txt将逻辑转换为SQL,首先检索数据然后应用转换

尝试以下

Linq To Entities

答案 1 :(得分:1)

ToString不是SQL函数,因此无法在SQL查询中完成。

试试这个:

var query =   (from i in Expenditure
              join d in Department on i.DepartId equals d.dID
              where i.Status == "Audit"
              group i by new { i.InvoiceId, d.Title, i.InvoiceDate } into g
              select new
              {
                g.Key.InvoiceId,
                g.Key.Title,
                g.Key.InvoiceDate,
              }).ToList()
              .select new
              {
                id = InvoiceId,
                txt = Title + " // " + InvoiceId + " // " + Convert.ToString(InvoiceDate)
              };

.ToList()之后的所有内容都将在内存中完成,您可以在其中使用任何.NET方法。