【发布时间】:2015-05-15 14:47:45
【问题描述】:
我必须将我的 linq 的结果保存在缓存中,然后再检索它。但我收到以下代码错误:
public PartialViewResult showall()
{
//initially getting data from DB
var task1 = from r in _db.Task1
where r.Status == true
orderby r.Post_Date descending
select new
{
id = SqlFunctions.StringConvert((double)r.Task1_ID),
dt = r.Post_Date,
typ = "Task1"
};
HttpContext.Cache.Insert(key: "Task1Data",
value: task1,
dependencies: null,
absoluteExpiration: DateTime.Now.AddHours(5),
slidingExpiration: System.Web.Caching.Cache.NoSlidingExpiration
);
var task1Cache = (System.Web.HttpContext.Current.Cache["Task1Data"] as IQueryable);
var task1list = from a in task1Cache.Cast<Task1data>()
select new
{
id = SqlFunctions.StringConvert((double)a.Task1_ID),
dt = a.Post_Date,
typ = a.typ
};
var task2 = from r in _db.Task2
orderby r.Post_Date descending
select new
{
id = SqlFunctions.StringConvert((double)r.Task2_ID),
dt = r.Post_Date,
typ = "Task2"
};
HttpContext.Cache.Insert(key: "Task2Data",
value: task2,
dependencies: null,
absoluteExpiration: DateTime.Now.AddHours(5),
slidingExpiration: System.Web.Caching.Cache.NoSlidingExpiration
);
var task2Cache = (System.Web.HttpContext.Current.Cache["Task2Data"] as IQueryable);
var task2list = from a in task2Cache.Cast<Task2data>()
select new
{
id = SqlFunctions.StringConvert((double)a.Task2_ID),
dt = a.Post_Date,
typ = a.typ
};
var listc = task1list.Union(task2list);
var q3 = (from r in listc.Cast<Totaldata>()
select new
{
mix = r.typ + "~" + r.id
}).ToList();
return PartialView("~/Views/Ex/_ShowAll.cshtml", q3);
}
我在最后一行得到以下异常:
System.Data.Entity.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理
附加信息:无法将类型“匿名类型”转换为类型“Models.Task1data”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型。
public class Task1data
{
public double Task1_ID { get; set; }
public DateTime Post_Date { get; set; }
public string typ { get; set; }
}
public class Task2data
{
public double Task2_ID { get; set; }
public DateTime Post_Date { get; set; }
public string typ { get; set; }
}
public class Totaldata
{
public double id { get; set; }
public DateTime Post_Date { get; set; }
public string typ { get; set; }
}
【问题讨论】:
-
您在控制器中选择了带有
select new的匿名类型,在您看来,您可能将Task1data指定为模型,因此出现错误。 -
事实并非如此。没有功能适用于 q3。像 q3.count() 它给出的异常类型不支持。
标签: c# asp.net linq asp.net-mvc-4 caching