如何使用Linq Contains()



我正在使用nHibernate,我需要创建一个这样做的查询:

Course Table
CourseId
CourseName
Task Table // course can have many tasks
TaskName
TaskId
CousreId

现在我需要输入a contains:

 session
   .Query<Course>()
   .Where(x =>
     x.Tasks.Contains(/* wants a task object. I want to do it on property level. */) &&
     x.CourseId == 1)

我怎么能改变我的查询做一个包含TaskName?

将您的任务投影到TaskName,然后在其上使用contains。

var query = session
    .Query<Course>()
    .Where(x => x.Tasks
                 .Select(t => t.TaskName)
                 .Contains(myTaskName)
             && x.CourseId == 1);

如果我理解正确的话,你可以使用任何方法

session.Query<Course>().Where(x => x.Tasks.Any(t => t.Name == "task name")
                                               && x.CourseId == 1);

你试过吗?

var results = session.Query<Course>()
      .Where(crs => crs.Tasks.Count(tsk => tsk.TaskName == theName) > 0);

这将计算具有正确名称的任务的数量(在我的示例中在theName中指定),并返回计数值大于零的所有课程,即包含具有特定名称的任务的所有课程。

您要么必须实现自己的IComparer或IEqualityComparer(我记得,我可能关闭了),并将其基于对象的特定属性。或者用Count()Find()代替。下面是一些伪代码:

session.Query<Course>().Where(x => x.Tasks.Count(t => t.TaskProperty == "something") > 0 && x.CourseId == 1)

我会尝试这样做:

var results = session
    .Query<Course>()
    .Where(crs => crs.Tasks.Any(tsk => tsk.TaskName == theName) && crs.CourseId == 1);

相关内容

  • 没有找到相关文章

最新更新