2016-04-27 12 views
0

any句を使用してotu結果をフィルタリングするlinq文を作成しようとしています。私の問題は、私は比較する単一の価値がないということです。linq複数の値の任意の句

以下の例では、私は親であるPropertyTaxBillエンティティを持っています。それぞれにはTaxPropertyAssessmentDetailsのコレクションが添付されています。

このクエリでは、特定のクラス階層に関連する請求書のみを処理するように指定できるため、classStrata変数に値が存在するかどうかを確認します。そうであれば、ユーザは特定のものを選択した。私はclassStrataに対してany句を実行しようとしていましたが、PropertyTaxBillに添付されているTaxPropertyAssessmentDetailsコレクションのすべての値を選択しようとしていました。これは可能ですか?

+0

私はかなり私はいずれにもこのような状況を処理するための述語のために必要となるものを想像することはできません。あなたは例を投稿できますか? –

+2

'x => classStrata.Any(y => x.TaxPropertyAssessmentDetails.Any(z => z.PropertyTaxClassStrataId == y))'です。それとももっと良い 'x => x.TaxPropertyAssessmentDetails.Any(z => classStracta.Contains(z.PropertyTaxClassStrataId))' –

+0

これはうまくいった。ありがとう –

答えて

0

efがefクエリに変換できるようにするためには、containsを使用する必要があります。 あなたのモデルが正しく理解されているかどうかはわかりません。ここにモデルを使った例があります。私はそれを修正することができますので、私が間違って理解した場合は教えてください。

public void TestMethod1() 
{ 
    IEnumerable<TaxBill> TaxBills = new List<TaxBill>(); 

    var query = TaxBills.Where(x => x.Id > 1); 
    var classStrata = new int[0]; 

    if (classStrata != null && classStrata.Any()) 
    { 
     query = query.Where(x => x.AssessmentDetails.Any(ad => ad.TaxClassStrataId.Any(cs => classStrata.Contains(cs)))); 
    } 
} 

とエンティティ

public class TaxBill 
{ 
    public int Id { get; set; } 
    public ICollection<AsessmentDetails> AssessmentDetails { get; set; } 
} 
public class AsessmentDetails 
{ 
    public ICollection<int> TaxClassStrataId { get; set; } 
} 
関連する問題