2

Entity Framework 5 Code First 用に次のクラスがあるとします。キーワードの配列を求めてすべての業種または部門を検索し、いずれかのキーワードに一致するすべてのリードを返す必要があります。また、リードの名前でも同じキーワードを検索する必要があります。私が立ち往生しているのは、複数のキーワードを検索する方法です。

メインクラス

public class Lead
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Industry> Industries { get; set; }
    public virtual ICollection<Division> Divisions { get; set; }
}

業界クラス

public class Industry
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<Lead> Leads { get; set; }
}

師団クラス

public class Division
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<Lead> Leads { get; set; }
}

サービス/リポジトリ呼び出し

public IQueryable<Lead> GetByKeywords(string keyword)
    {
        var result = leadRepository.GetAll().Where
            (x => x.Industries.Any(i => i.Name == keyword)
            || x.Divisions.Any(d => d.Name == keyword)
            || x.Name.Contains(keyword));

        return result;
    }

上記のクエリは、単一のキーワードに対して機能します。しかし、文字列に複数の単語があり、個々のキーワードのいずれかに一致させたい場合は機能しません。

4

2 に答える 2

0

文字列をリストに分割し、各キーワードをループする必要があります。このようなもの... (頭のてっぺんから)

IQueryable<Lead> GetByKeywords(string allKeywords)
{
    List<string> keywords = allKeywords.Split(" ");
    var result = leadRepository.GetAll();

    foreach (string keyword in keywords)
    {
        result = result.Where
            (x => x.Industries.Any(i => i.Name == keyword)
            || x.Divisions.Any(d => d.Name == keyword)
            || x.Name.Contains(keyword));
    }

    return result;
}
于 2013-07-11T00:26:18.323 に答える