【发布时间】:2011-03-03 06:04:56
【问题描述】:
我们正在使用 Dynamic Linq 库构建动态搜索表达式。我们遇到了一个问题,即如何使用动态 linq 库为具有一对多关系的导航属性构建一个 Lamba 表达式。
我们将以下内容与 contains 语句一起使用-
Person.Names.Select(FamilyName).FirstOrDefault()
它有效,但有两个问题。
它当然只选择 FirstOrDefault() 名称。我们希望它使用每个人的所有名字。
如果没有人的姓名,则 Select 会引发异常。
常规查询并不难,因为我们可以做两个 from 语句,但 lambda 表达式更具挑战性。
如有任何建议,我们将不胜感激。
编辑- 附加代码信息...非动态 linq 表达式看起来像这样。
var results = persons.Where(p => p.Names.Select(n => n.FamilyName).FirstOrDefault().Contains("Smith")).ToList();
类如下所示-
public class Person
{
public bool IsActive { get; set;}
public virtual ICollection<Name> Names {get; set;}
}
public class Name
{
public string GivenName { get; set; }
public string FamilyName { get; set; }
public virtual Person Person { get; set;}
}
【问题讨论】:
-
能把
FamilyName表达的代码贴出来吗?
标签: linq dynamic-linq