无法翻译表达式

时间:2012-12-26 21:04:10

标签: c# linq-to-sql

from p in context.ParentCompanies
where p.Name.Contains(e.Filter)
orderby p.Name
select new { Company = p.Name + "," + p.Country  };

当我添加 p.Country 或任何其他属性时,上述linq查询失败。

例外:

Could not translate expression 'Table(ParentCompany).Where(p => p.Name.Contains(Invoke(value(System.Func'1[System.String])))).OrderBy(p => p.Name)' into SQL and could not treat it as a local expression

2 个答案:

答案 0 :(得分:4)

LINQ to SQL无法将您的字符串操作转换为SQL。从数据库中选择p.Name和p.Country,然后在单独的步骤中连接,如下所示:

var parentCompanies = (from p in context.ParentCompanies
                       where p.Name.Contains(e.Filter)
                       orderby p.Name
                       select new { p.Name, p.Country }).ToList();

var concatenated = (from c in parentCompanies
                    select new { Company = c.Name + "," + c.Country });

答案 1 :(得分:0)

尝试创建class并继承ParentCompanies

public ParentCompaniesEntity : ParentCompanies
{
   public string CompanyCountry {get; set;}
}

这就是如何使用。

var parentCompanies = (from p in context.ParentCompanies
                       where p.Name.Contains(e.Filter)
                       orderby p.Name
                       select new ParentCompaniesEntity() 
                       { 
                         CompanyCountry = p.Name + ", " + p.Country
                       }).ToList();