2016-05-24 9 views
2

私はいくつかの列を持つデータベース内のビューを持っています。私はこのクエリを試しています非エンティティ型SQLクエリから複数の列を取得するにはどうすればよいですか?

public class TestEntity 
{ 
    public string ref { get; set; } 
    public string Name { get; set; } 
    public string Batch { get; set; } 
} 
var res = dbContext.Database.SqlQuery<TestEntity>("Select * from dbo.MyView").ToList(); 

しかし、これはヌル値だけでデータがないオブジェクトのリストを返します。私はこのような単一の列を取得しようとしたとき、私は私がTestEntityの代わりに文字列を使用する場合、それが動作するため、問題はTestEntityであることに気づいた

var res = dbContext.Database.SqlQuery<string>("Select Name from dbo.MyView").ToList(); 

はしかし、それは動作します。 私は何をここで間違っているのですか?

+0

...あなたがマークすることを忘れないでくださいお手伝いしますならば - ' WHEREのCol1がNULLではないとcol2ではありません> NULL..' – sagi

+0

すみません。私はすべてがnullだと言いたかった。すべての結果 – fredzyadi

+1

は、クラス内のデータベースと同じ列名ですか?そうでなければ、あなたの文脈でmodelBuilderが必要になるでしょう、またはSQLクエリを "SELECT ...として参照...名前として... ..." – DevilSuichiro

答えて

4

はちょうどこれに以下のコード

var res = dbContext.Database.SqlQuery<TestEntity>("Select * from dbo.MyView").ToList(); 

を交換して、再試行してください...

var res = dbContext.Database.SqlQuery("Select * from dbo.MyView").ToList<TestEntity>(); 

をし、それがその後、動作していない、まだ場合は、あなたの

をチェックする必要があります

TestEntity

と同じ列のためのあなたの

dbo.MyView

。 MYVIEWとTestEntityで異なる列がある場合、それは動作しませんので...

クエリで列名を変更すると、それは例外がスローされますか、それが正常に動作していないよ...

これは `NULL`レコードフィルター

おかげで...

+0

私はこれらの行の両方がオブジェクトマテリアライゼーションが等しいとにかくToList()で行われます。 – DevilSuichiro

+0

試しましたか? –

+0

はい、問題の名前が一致しませんでした。私はダッシュ( " - ")をSQLビューで使用していますが、C#ではこの構文がサポートされていないので、エンティティは破線で囲まれていませんでした。それが理由だった。ご協力ありがとうございました。 – fredzyadi

関連する問題