2012-12-26 62 views
4
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

+0

从查询中删除“where”子句时会出现什么异常? – Dima

+0

发生同样的异常。 – neo

回答

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