1

我正在尝试完成以下查询(注意 .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();

一切正常。怎么会这样?

提前致谢!

4

2 回答 2

2

Where Expression不知道如何处理字符串的连接。它试图理解属性,而不是值。

此外,为了将来参考,带有 concat 的 StartsWith 和另一个没有 out 的 StartsWith 实际上会返回相同的内容。

这是你想要的吗?

return (from p in _session.Linq<Profile>()
        where p.Firstname.StartsWith(wildcard) || p.Lastname.StartsWith(wildcard)
        select p).ToList();
于 2009-10-18T14:35:05.053 回答
1

更新:根据新的见解和编辑的问题重写了答案。

里面有什么wildcard,预期的输出与输入是什么?如果你 concat"Abel" + " " + "Braaksma"它将返回 true for wildcard.StartsWith("Abel")orwildcard.StartsWith("Abel Br")但 not wildcard.StartsWith("Braaks")。你也许是说Contains相反?但这不会解决您的错误:

您收到的异常似乎来自 NHibernate,而不是来自您的代码。是否有可能Lastname没有正确映射到数据库表?你能显示堆栈跟踪吗?您能否访问 LINQ 语句上下文之外的属性,但使用表中的数据填充?

于 2009-10-18T14:20:37.833 回答