質問

私はSubsonic 3/Linqをかなり初めてであり、明らかな何かが欠けているかどうかはわかりませんが、予測の問題に遭遇したと思います。私は最も基本的なクエリを実行しようとしており、匿名タイプを使用した場合にのみ適切な結果を取り戻そうとしています。匿名タイプを通常のクラスタイプと交換した瞬間、すべてのプロパティがnull/ゼロに設定されます。私はDALクラスライブラリを作成しているので、残念ながら匿名タイプは選択肢ではありません。

スニペット

using System;
using System.Linq;
using Fruits.Data;

namespace FruitTest {

    class Program {
        static void Main(string[] args) {

            var db = new FruitsDB();

            var fruits = from f in db.Fruits
                         select new FruitView {
                             MyFruitID = f.FruitID,
                             MyFruitName = f.FruitName,
                         };

            foreach (var f in fruits) {
                Console.WriteLine(f.MyFruitID + "\t" + f.MyFruitName);
            }

        }
    }

    public class FruitView {
        public int MyFruitID { get; set; }
        public string MyFruitName { get; set; }
    }

}

したがって、これは機能しません(すべてのヌル/ゼロを返します)

var fruits = from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName,
             };

これは期待どおりに機能します

var fruits = from f in db.Fruits
             select new {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName,
             };

私の問題はやや似ています これこれ, 、私だけが参加していません。単純な選択。

どんな手がかりも高く評価されます。

正しい解決策はありません

他のヒント

これに対する本当の答えはありません。私はこれに頻繁に遭遇しました。割り当ての順序を読み取り順序と同じままにします。すなわち。 QueryTextが表示され、列がDBから読み取られる順序で表示されている場合は、デバッグ時間で。次に、QueryTextのSQL Selectステートメントの順序と同じように割り当てを保持します。問題を10回中9回解決します。

代わりにこれを試してください:

IList<FruitView> fruits = (
         from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName
             }).ToList();

また

IQueryable<FruitView> fruits = 
         from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName
             };

..と foreach 従来通り。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top