我正在使用此代码过滤Linq数据并且它一直在崩溃。
.Where(t => t.OpenUserId == Guid.Parse(Session["LogedUserID"] as string))
我得到的错误是:
类型' System.NotSupportedException'的例外情况发生在 EntityFramework.SqlServer.dll但未在用户代码中处理
我知道的错误就在这一行:
public ActionResult Index()
{
var model = db.Tickets
.Include(t=>t.TicketNotes)
.Where(t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000"))
.OrderBy(t=>t.OpenDate);
return View(model);
}
因为Guid在这种情况下是硬编码的,所以它正在工作:
{{1}}
答案 0 :(得分:4)
您收到此错误,因为Linq代码在SQL中转换。在SQL中,方法Guid.Parse
不存在。
在您的Where(t.OpenUserId == new Guid("00000000-0000-0000-0000-000000000000"))
示例中,您没有解析任何内容(调用任何方法),您只需创建一个受支持的新Guid
。
一种方法是Parse
Guid
Where
以外的var userId = Guid.Parse(Session["LogedUserID"] as string); // conversion is done outside Where
var model = db.Tickets
.Include(t => t.TicketNotes)
.Where(t => t.OpenUserId == userId)
.OrderBy(t => t.OpenDate)
.ToList();
。
ToList()
另一种解决此问题的简单方法是添加var model = db.Tickets
.Include(t => t.TicketNotes)
.ToList() // < added here
.Where(t => t.OpenUserId == Guid.Parse(Session["LogedUserID"] as string))
.OrderBy(t => t.OpenDate)
.ToList();
。正如@entropic所提到的,这将枚举整个表格,不推荐用于大型表格。
NLS_DATE_FORMAT
答案 1 :(得分:4)
请尝试这个,应该工作
Guid g = Guid.Parse(Session["LogedUserID"] as string);
var model = db.Tickets
.Include(t => t.TicketNotes)
.Where(t => t.OpenUserId == g)
.OrderBy(t => t.OpenDate)
.ToList();