gpt4 book ai didi

entity-framework - 为什么 EF4 中的匿名类型与 LINQ to SQL 中的匿名类型不同?

转载 作者:行者123 更新时间:2023-12-04 06:22:31 25 4
gpt4 key购买 nike

我在 LINQ to SQL 中有以下查询,用于从尚未在可连接表中的表中获取所有记录。

// <param name="id">The ID of the Person</param>
IEnumberable<object> GetUnassignedClients(int id)
{
_db.Clients
.Select(i => new
{
Client_id = i.Id,
Person_id = id,
Cid = id + "." + i.Id // Please don't ask why I do this. I just have to do it
// ... some more fields
})
.Where(o =>
!_db.Clients_Persons
.Where(t => t.Person_id == id)
.Select(t => t.Client_id)
.Contains(o.Client_id))
.Distinct().ToList();
}

现在我已经开始迁移到 EF4,但是匿名类型的“Cid”部分带有组合 ToList() (ToList() 触发的异常是一个没有 WHERE 条件的简化测试用例)失败并出现异常:

Unable to create a constant value of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.



为什么会这样,或者我在这里遗漏了什么?

最佳答案

EF 不知道如何翻译表达式 id + "." + i.Id转换为有效的 SQL,这就是它失败的原因。你必须告诉 EF 它需要转换 id从整数到字符串。您可以使用 SqlFunctions 执行此操作按以下方式类:

var ret = _db.Clients
.Select(i => new
{
Client_id = i.Id,
Person_id = id,
Cid = SqlFunctions.StringConvert((double) id) + "." + SqlFunctions.StringConvert((double) i.Id) // Please don't ask why I do this. I just have to do it
// ... some more fields
})
.Where(o =>
!_db.Clients_Persons
.Where(t => t.Person_id == id)
.Select(t => t.Client_id)
.Contains(id)
)
.Distinct()
.ToList()
;

关于entity-framework - 为什么 EF4 中的匿名类型与 LINQ to SQL 中的匿名类型不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6381916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com