2

SELECT現在、EF Code-Firstを使用していますが、データベース内の多くのテーブルからデータを取得したいと考えています。このクエリはカスタマイズ可能なクエリであるため、取得するデータの種類を予測することはできません。

最初、実行しようとしたときに、値ctx.Database.SqlQuery<string>(sql, param)に直面したときに例外が発生しました。DateTimeサーバー側にキャストせずにこれを実行したいと思います。

誰かが私がそれをどうやってやるのか考えていますか?LINQ、LINQ-SQL、または純粋なSQLである可能性があります-それが仕事を成し遂げる限り!みんなありがとう...

4

3 に答える 3

1

あなたはそれを取得しません。Linq-to-entitiesは、文字列のリストに変換しません。最善のチャンスは、通常のクエリを実行し、アプリケーションの変換と変換を行うことです。

ユーザーがどの列を選択するかわからないという議論は、より動的なソリューションが必要であることを意味します-Linq-to-entitiesは、適切なツールではありません(Dynamic Linqを使用するか、式ツリーを手動で構築する場合を除く)。ESQLまたはSQLを直接使用します。

于 2012-04-23T08:59:59.793 に答える
0

多くのテーブルからデータを選択するときは、匿名型を使用して、これらのテーブルから選択するプロパティ (フィールド) を次のような新しいエンティティにカプセル化します。

var query = _db.Categories.Join(
_db.Products,
c => c.CategoryId,
p => p.CategoryId,
(category, product) =>
   new
   {
       ProductName = product.Name,
       CategoryName = category.Name,
       ExpiryDate = product.ExpiryDate
   });
于 2012-04-23T05:53:56.027 に答える
0

次のようにデータ フィールドを文字列にキャストすることで、文字列値を取得できます。

var query = _db.Categories.Join(
_db.Products,
c => c.CategoryId,
p => p.CategoryId,
(category, product) =>
   new
   {
       ProductName = product.Name.toString(),
       CategoryName = category.Name.toString(),
       ExpiryDate = product.ExpiryDate.toString()
   });
于 2012-04-23T05:57:08.860 に答える