フィードバックカードを追跡する同僚から継承したアプリケーションがあります。私はまた、いくつかのユーザー入力フィルターに基づいてWebページに表示されるカードをフィルターするフォームを持っています。フィードバックの詳細(サービスは良い/悪い、部屋はきれいだった/汚れていたなど)に対して適用されているフィルタを除いて、すべてのフィルタは正常に動作します。これらは、私のカードクラスのメンバークラスのリストに格納されています。メンバーオブジェクトリストに対するLINQクエリのフィルタリング
以下は、各クラスのスニペットのセットです。
public class Card {
public long ID { get; set; }
public List<Feedback> feedback { get; set; }
...
}
public class Feedback {
public long ID {get; set; }
...
}
public class CardFilter {
public ICollection<long> FeedBackDetails {get; set; }
...
}
...
public IQueryable<CardType > GetFeedbackQueryable<CardType>(CardFilter filter = null)
where CardType : Card
{
var data = Service.GetRepository<CardType>();
var CardQuery = data.All;
...
if (filter.FeedbackDetails != null && filter.FeedbackDetails.Count != 0)
{
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.All(fbv => filter.FeedbackDetails.Contains(fbv.ID));
}
return cardQuery;
}
...
私はフィルタしてみてください:それは、任意のフィードバックなしで15カードのインスタンスを返します
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.All(fbv => filter.FeedbackDetails.Contains(fbv.ID));
を。フィルタを使用している場合:
cardQuery = cardQuery.Where(card => card.FeedbackValues)
.Any(fbv => filter.FeedbackDetails.Contains(fbv.ID));
データを見て適切なカードを参照することはできますが、何も返されません。
私はLINQを新しくしているので、私は何か不足していることを知っています。ここで正しい方向に私を指摘してください。
EDIT:
このアプリケーションにもう少し背景を与えるために、私は少しより冗長になるでしょう。カードテーブル/モデルには、カードとそのカードを提出する人に関する情報があります。それは私が名前や匿名、住所、コメントされている場所、その他いくつかの基本的な事実を意味します。フィードバック項目は、別の表にリストされ、Webフォームに表示され、ユーザーはそれぞれに対して正か負かをチェックできます。フィードバックの詳細ごとに3つの可能な回答があります。 0(正)、1(負)または無(無回答)。
カードモデルには、すべての基本カード情報とフィードバック応答の集合が含まれています。私に迷惑をかけている私のフィルタは、その回答の集合に対するものです。各カードには0から52の回答があり、すべての状況に適用されない可能性があります。したがって、肯定的であれ否定的であれ、特定の状況(清潔さなど)に関するすべてのカードを見る必要があります。これがこのフィルターの目的です。
正確にクエリを取得しようとしていますか? –
私はあなたの2番目のクエリがあなたが探しているものに近いと思っています(.Anyの前の括弧がそこにあるべきではないにもかかわらず)。それは、「フィードバック値の少なくとも1つのIDがフィルタのフィードバックの詳細に含まれているすべてのカードを私に渡してください」と言っています。それはあなたがやろうとしていることですか? –
これは 'All'を使ってコンパイルしましたか? 'IQueryable'は、[Enumerable.All](https://msdn.microsoft.com/en-us/library/bb548541%28v=vs.100%29.aspx?f=255&MSPPError=-2147217396)とは異なる署名を提供しますか? )?これは 'bool'を返し、' cardQuery'に代入することができないからです。 –
geniusburger