0

結合された (インクルードされた) テーブルがアイテムのコレクションと一致する結果のリストを返すステートメントを書くのに問題があります。

EF 5.0 エンティティ モデルを使用しています。私は、彼らが選択VendorProfileした PK/FK テーブルを含む単純なテーブルを持っています。VendorCategoriesProfileID

VendorProfiles にコレクション (フォーム投稿から渡された) に一致する VendorCategories がある結果のみを取得する方法がわかりません。複数の検索基準を処理できる動的検索機能を構築しようとしていましたが、すべて機能しますが、criteria.categories.

public class CustomSearchCriteria
{
    public string name { get; set; }
    public string company { get; set; }
    public DateTime? startDate { get; set; }
    public DateTime? endDate { get; set; }
    public int[] categories { get; set; }
}

public IEnumerable<VendorProfile> Search(CustomSearchCriteria criteria)
{
    IQueryable<VendorProfile> query = _db.VendorProfiles
        .Include("VendorCategories")
        .OrderBy(v => v.ProfileID);

    if (criteria.categories != null)
        query = query.Where(v => v.VendorCategories.Contains(criteria.categories));

    if (criteria.name != string.Empty)
        query = query.Where(v => v.Name.Contains(criteria.name));

    if (criteria.company != string.Empty)
        query = query.Where(v => v.CompanyName.Contains(criteria.company));

    if (criteria.startDate != null && criteria.endDate != null)
        query = query.Where(v => v.DateCreated > criteria.startDate && v.DateCreated < criteria.endDate);

        return query.ToList();
    }
4

2 に答える 2

2

Queryable.All()を使用して次のことを試してみて、それがどのように機能するか教えてください。

criteria.categories編集 #1: VendorCategoryIDs のコレクションが含まれているという前提の下で、変数の型に一致するようにクエリを変更しました。

編集#2:コメントごとに、All()の代わりにAny()を使用するようにクエリを変更しました

query = query.Where(v => criteria.categories.AsQueryable().Any(cat => v.VendorCategories.Select(vendCat => vendCat.VendorCategoryID).Contains(cat));
于 2013-01-07T19:05:58.977 に答える
0
// assumes v.VendorCategories is int[]
if (criteria.categories != null && criteria.categories.Any())
    query = query.Where(v => v.VendorCategories.All(id => criteria.categories.Contains(id)));
于 2013-01-07T21:45:15.093 に答える