1

そのため、同じint変数の順序付きリストにあるint変数でクエリを順序付けようとしています。たとえば、クエリはアイテムのリストの順序で並べ替える必要があります。各データコンテキストは異なるデータベースからのものであるため、最初のクエリをペット名の順序に基づいてIDの順序付きリストにします。2番目のクエリのデータフィールドからはペットIDのみを使用できます。クエリは次のようになります。

        using (ListDataContext syndb = new ListDataContext())
        {
            using (QueryDataContext ledb = new QueryDataContext())
            {   
                // Set the order of pets by name and make a list of the pet id's
                var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
                // Reorder the SoldPets query using the ordered list of pet id's 
                var slp = ledb.SoldPets.OrderBy(x => stp.IndexOf(x.petId)).Select(x => x);

                // do something with the query

            }
        }

2番目のクエリは、「メソッド'Int32 IndexOf(Int32)'にはSQLへの変換がサポートされていません」というメッセージを表示します。エラー、私が必要なことをする方法はありますか?

4

3 に答える 3

2

LINQ to SQL (EF) は、LINQ クエリを SQL サーバーに対して実行できる SQL に変換する必要があります。エラーが言おうとしているのは、.NET メソッドにIndexOfは同等の SQL がないということです。SoldPetsその部分を実行せずにテーブルからデータを取得IndexOfし、LINQ to SQL (EF) から残りの順序付けを行うのが最善の場合があります。

このようなものが動作するはずです:

List<StoredPet> storedPets;
List<SoldPet> soldPets;

using (ListDataContext listDataContext = new ListDataContext())
{
    using (QueryDataContext queryDataContext= new QueryDataContext())
    {   
        storedPets =
            listDataContext.StoredPets
                .OrderBy(sp => sp.Name)
                .Select(sp => sp.PetId)
                .ToList();

        soldPets =
            queryDataContext.SoldPets
                .ToList();
    }
}

List<SoldPets> orderedSoldPets =
    soldPets.OrderBy(sp => storedPets.IndexOf(sp.PetId))

注:あなたPetIdの例では大文字が変更されているため、それを確認することをお勧めします。

于 2012-12-11T09:08:16.603 に答える
1

リストのサイズが許容できる場合は、これを使用できます。

using (ListDataContext syndb = new ListDataContext())
{
    using (QueryDataContext ledb = new QueryDataContext())
    {
        var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
        var slp = ledb.SoldPets.ToList().OrderBy(x => stp.IndexOf(x.petId));

        // do something with the query
    }
}
于 2012-12-11T09:41:12.610 に答える
1

メソッドに相当するものがないため、LinqToSql は linq ステートメントを SQL に変換できませんIndexOf()。最初にメソッドでlinqステートメントを実行してからToList()、メモリ内でソートする必要があります。

using (ListDataContext syndb = new ListDataContext())
using (QueryDataContext ledb = new QueryDataContext())
{
    var stp = syndb.StoredPets.OrderBy(x => x.Name).Select(x => x.PetID).ToList();
    // Reorder the SoldPets query using the ordered list of pet id's 
    var slp = ledb.SoldPets.ToList().OrderBy(x => stp.IndexOf(x.petId));
}
于 2012-12-11T09:39:11.327 に答える