我正在尝试完成以下查询(通知.StartsWith):
return (from p in _session.Linq<Profile>()
where (p.Firstname + " " + p.Lastname).StartsWith(wildcard)
select p).ToList();
抛出:无法解析属性:Firstname.Lastname。
如果我这样做:
return (from p in _session.Linq<Profile>()
where p.Firstname.StartsWith(wildcard)
select p).ToList();
一切正常。怎么会这样?
提前致谢!
答案 0 :(得分:2)
Where
Expression
不知道如何处理字符串的连接。它试图弄清楚属性,而不是价值。
此外,为了将来参考,带有concat的StartsWith和带有out的另一个将在实践中返回相同的东西。
这是你想要的吗?
return (from p in _session.Linq<Profile>()
where p.Firstname.StartsWith(wildcard) || p.Lastname.StartsWith(wildcard)
select p).ToList();
答案 1 :(得分:1)
更新:根据新的见解和已编辑的问题重写答案。
wildcard
中的内容是什么?预期的输出与输入相比是多少?如果您结束"Abel" + " " + "Braaksma"
,则wildcard.StartsWith("Abel")
或wildcard.StartsWith("Abel Br")
将返回true,但不会wildcard.StartsWith("Braaks")
。你可能意味着Contains
吗?但这不会解决您的错误:
您收到的异常似乎来自NHibernate,而不是来自您的代码。 Lastname
是否可能没有正确映射到数据库表?你能展示一下堆栈跟踪吗?您是否可以访问LINQ语句上下文之外的属性,但是填充了表中的数据?