私は Linq を初めて使用し、複数のタグ ID を含む結果をデータベースに照会するのが困難です。
だから、私は2つのモデルを持っています:
フォルダーとフィールドタグ。フォルダには、すべての FieldTag ID がリストされた文字列が保持されます。例: 1,2,3
SopFolder クラス:
public class SopFolder
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime LastUpdated { get; set; }
public int Status { get; set; }
public string SopFields { get; set; }
public virtual ICollection<SopFolder> SopFolderChildrens { get; set; }
public virtual ICollection<SopBlock> Blocks { get; set; }
public virtual ICollection<SopReview> Reviews { get; set; }
}
SopField クラス:
public class SopField
{
public int Id { get; set; }
public string Name { get; set; }
}
私は、SopFolders のリストを返すクエリを作成しようとしています。これをモデル (ビューでバインドするため) および/または json として出力できます。バインディングなどは正常に機能していますが、SopFields でフィルタリングされた結果ではなく、完全なフォルダー リストに対してのみです。アクションの URL はおそらく次のようになります: /SopFolders/ShowTree/?id=4&SopFields=1,2,4
SopFields でフィルタリングされた結果を提供するクエリの作成に問題があります。
アドバイスをありがとう。私はasp.net mvc 4を使用しています。アプローチ全体を改善するためのアイデアも高く評価されています。
UPDATE 1(コメントへの回答):
この例を投稿する前に、SopFields に int コレクションを使用しましたが、文字列に置き換えました。文字列から値を取得するのも非常に簡単で、おそらく少し単純化されます。いずれにせよ、int コレクションである可能性もあります。私にとっては違いはありません。
私が書いた URL は、結果を配信するアクションに渡される引数を説明するためのものです。
したがって、文字列ではなく fieldTags のリストがあると仮定します。
私はこれに頭を悩ませる必要があるため、複雑な linq クエリはあまり得意ではありませんが、概念的なクエリは次のようになります (機能していないことは確かです)。
public ActionResult Index(List<int> fieldTags,int id = 1 )
{
// other stuff
var model =
_db.SopFolders
.Where(r => r.Id == id && r.SopFields.Contains(sopFields))
.Select(r => new
{
id = r.Id,
Text = r.Name,
hasChildren = r.SopFolderChildrens.Any()
});
// more stuff
return View(model);
}
よろしく、マーカス