注:すべてのコードは頭のてっぺんに書かれています。多少の誤差が含まれる場合があります。この質問の全体的なポイントを取得するだけです)
このクラス定義を取る: (簡単にするために削減)
public class CodedValue
{
public string Code { get; set; }
public string Value {get; set; }
}
それらのオブジェクトを取る:
CodedValue cv1 = new CodedValue(){ Code = "A", Value = "1" };
CodedValue cv2 = new CodedValue(){ Code = "B", Value = "2" };
IList<CodedValue> cvList = new List<CodedValue>();
cvList.Add(cv1);
cvList.Add(cv2);
cvList には、フィルタリングする CodedValue のリストが含まれています。
私のデータベースにこれらのレコードが含まれているとしましょう:
CODE VALUE
A 1
A 2
B 1
B 2
今、コード化された値がリストにあるすべてのオブジェクトを取得したい
var filter = from o in MyRepository.List()
where cvList.Contains(o.CodedValue)
select o;
Hibernate は、この Linq を次のように変換します。
select [Fields...] from [Table...]
where Code in ('A', 'B') and Value in ('1', '2');
これは間違っています。私のレコードの例を見ると、この SQL はすべての行を返します。SQL は次のように変換する必要があります。
select [Fields...] from [Table...]
where (Code = 'A' and Value = '1') or (Code = 'B' and Value = '2');
では、Linq を使用して必要な結果を得ることができますか? もしそうなら、どのように?そうでない場合、どうすればそれを達成できますか?
ありがとう