2009-10-18 72 views
1

我试图完成下面的查询(请注意.StartsWith):LINQ的NHibernate的:对多个属性.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

我更新了 - 什么是你想怎么办?选择名称以某种东西开头的所有'Profile'? – 2009-10-18 15:13:10

+0

我试图选择名字和姓氏(concat'ed)等于通配符的所有配置文件。 – jhovgaard 2009-10-18 16:00:41

+0

你的意思是平等吗? – 2009-10-18 19:57:28

回答

2

WhereExpression不知道如何处理串联字符串。它试图理解属性,而不是价值。

此外,以备将来参考StartsWith与CONCAT,另一个用了会在实践中返回相同的事情。

这是你想要的吗?

return (from p in _session.Linq<Profile>() 
     where p.Firstname.StartsWith(wildcard) || p.Lastname.StartsWith(wildcard) 
     select p).ToList(); 
+1

好吧,这很有道理! 但是,如果我不能这样做,你有另一种方式来完成我想要做的事情吗? – jhovgaard 2009-10-18 15:06:47

+0

不会工作。名字是说“拉姆”和姓氏是说“拉尔”。如果我搜索“Ram Lal”,该怎么办?这不会给你结果。 – 2014-08-18 07:22:26

1

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

什么是wildcard什么是预期输出与输入?如果连续输入"Abel" + " " + "Braaksma",它将返回为wildcard.StartsWith("Abel")wildcard.StartsWith("Abel Br")而不是wildcard.StartsWith("Braaks")。你的意思可能是Contains?但是,这不会解决你的错误:

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

+1

好的,我进一步了。我几乎确信这个错误是由于Linq中的一个NHibernate错误造成的。当查询由L2NHibernate“转换”时,它实际上是在请求Firstname.Lastname而不是连接这两个属性。 – jhovgaard 2009-10-19 19:15:38

相关问题