8

これに似た質問は他にもたくさんありますが、私がやろうとしていることを実行しているようには見えません。文字列とクエリのリストを渡したいのですが

SELECT ownerid where sysid in ('', '', '') -- i.e. List<string>

または好き

var chiLst = new List<string>();
var parRec = Lnq.attlnks.Where(a => a.sysid IN chiList).Select(a => a.ownerid);

私はa.sysid.Contains()で遊んでいますが、どこにも到達できませんでした。

4

3 に答える 3

11

Contains前進する方法です:

var chiLst = new List<string>();
var parRec = Lnq.attlnks.Where(a => chiList.Contains(a.sysid))
                        .Select(a => a.ownerid);

HashSet<string>すべてのcontainsチェックを考えると、パフォーマンスの観点からは、リストの代わりに使用したほうがよいでしょう。(これは、かなりの数のエントリがあることを前提としています...少数の値の場合、どちらの方法でも大きな違いはなく、List<string>さらに高速になる可能性があります。)

パフォーマンスの側面では、このためにLINQ to Objectsを使用していることを前提としていることに注意してください。LINQtoSQLのようなものを使用している場合は、Containsチェックがインプロセスで実行されないため、問題ありません。

于 2012-04-16T18:22:27.723 に答える
1

アプローチに加えて、次のContainsことができjoinます。

var parRec = from a in Lnq.attlnks
             join sysid in chiLst
                 on a.sysid equals sysid
             select a.ownerid

これがHashSetよりもうまくいくかどうかはわかりませんContainsが、少なくとも同様のパフォーマンスが得られます。Containsリストで使用するよりも確かにうまくいくでしょう。

于 2012-04-16T18:28:33.757 に答える
1

あなたは電話しないでしょうa.sysid.Contains; IN(SQL)の構文は、(LINQ)の構文の逆ですContains

var parRec = Lnq.attlnks.Where(a => chiList.Contains(a.sysid))
                        .Select(a => a.ownerid);
于 2012-04-16T18:23:31.763 に答える