亜音速3Linqプロジェクト匿名タイプはクラスタイプではありません
-
20-09-2019 - |
質問
私は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
従来通り。
所属していません StackOverflow