0

好吧,这个让我难住了。

我有一个名为 Interviews 的对象集合。采访中有一系列笔记。Note 具有名为 NoteText 的字符串 (nvarchar(max) on the database) 属性。

我有一个名为关键字的列表。

我需要做的是找到所有具有 NoteText 属性中的任何关键字的 Note 的采访。

到目前为止我有这个:

var interviewQuery =
from i in dbContext.Interviews  //dbContext was created with Telerik OpenAccess
    .Include(n => n.Notes)
    .Where(i => i.Notes.Any(n => keywords.Contains(n.NoteText) ))
orderby i.WhenCreated descending
select i;

我没有收到错误,我也没有得到任何结果。

4

2 回答 2

0

我在 linq 方面很差,但这可以通过循环轻松完成。

var matchinginterviews = new List<Interview>();
foreach (var inter in MyInterviewEnumerable)
{
    foreach (var note in inter.NoteCollection)
    {
        foreach (string keyword in keywordList)
        {
            if (note.NoteText.IndexOf(keyword) != -1)
            {
                matchinginterviews.Add(inter);
            }
        }
    }
}
于 2015-08-05T19:00:44.900 回答
0

导致空结果的原因是您正在查找包含任何注释的全部内容的任何关键字值。

我们做了一个扩展方法 ContainsAny:

public static bool ContainsAny(this string s, IEnumerable<string> possibleContained)
{
    foreach (string p in possibleContained)
    {
        if (s == p) return true;
        if (s == null) continue;
        if (s.Contains(p)) return true;
    }

    return false;
}

然后你可以做一些类似于你开始的事情:

var results = dbContext.Interviews.Where(i => i.Notes.Any(n => n.NoteText.ContainsAny(keywords)));
于 2015-08-05T19:07:24.093 回答