Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 为什么EF4中的匿名类型不同于LINQ和SQL?_Entity Framework_Linq To Sql_Entity Framework 4 - Fatal编程技术网

Entity framework 为什么EF4中的匿名类型不同于LINQ和SQL?

Entity framework 为什么EF4中的匿名类型不同于LINQ和SQL?,entity-framework,linq-to-sql,entity-framework-4,Entity Framework,Linq To Sql,Entity Framework 4,我在LINQtoSQL中有以下查询,用于从一个表中获取尚未在jointable中的所有记录 // <param name="id">The ID of the Person</param> IEnumberable<object> GetUnassignedClients(int id) { _db.Clients .Select(i => new { Client_id = i.Id, Perso

我在LINQtoSQL中有以下查询,用于从一个表中获取尚未在jointable中的所有记录

// <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();
}
//此人的ID
IEnumberable GetUnassignedClient(int id)
{
_db.客户
.选择(i=>new
{
客户识别号=i.id,
个人id=id,
Cid=id+“+i.id//请不要问我为什么要这样做。我只是必须这样做
//…更多的领域
})
。其中(o=>
!\u db.Clients\u Persons
.其中(t=>t.Person\u id==id)
.Select(t=>t.Client\u id)
.Contains(o.Client_id))
.Distinct().ToList();
}
现在我已经开始迁移到EF4,但是匿名类型的“Cid”部分与组合
ToList()
(ToList()触发的异常是一个没有WHERE条件的简化测试用例)失败,出现异常:

无法创建的常量值 键入“System.Object”。只有原始的 类型('如Int32、String和 在此上下文中支持Guid')


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

EF不知道如何将表达式
id+“+I.id
转换为有效的SQL,这就是它失败的原因。您必须告诉EF它需要将
id
从整数转换为字符串。您可以通过以下方式使用类执行此操作:

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