0

これが LinqPad では機能するのに、アプリの C# 式として機能しない理由を誰か教えてもらえますか?

私はEntity Frameworkを使用しています...

from p in Productions
join t in MaterialTransactions
    on p.Prodn_ID equals t.Prodn_ID
where p.WO_ID == 2345
orderby p.Date descending
select new 
{
    Id = p.Prodn_ID,
    Date = p.Date,
    Line = (p.ProdLine.Factory.Factory_No + '/' + p.ProdLine.ProdLine_No.ToString()),
    Qty = p.Qty,
    Wgt = (double)p.ActWgt,
    Speed = (double)p.ActSpeed,
    MaterialUsed = t.Material.Name}

「'System.Object' 型の定数値を作成できません。このコンテキストでは、プリミティブ型または列挙型のみがサポートされてSystem.Exceptionいます。」というメッセージが表示されます。

4

3 に答える 3

0

問題の原因は次の行だと思います。

Line = (p.ProdLine.Factory.Factory_No + '/' + p.ProdLine.ProdLine_No.ToString())

これは、クエリの結果と .NET メソッドの結果を結合するためです。

多分これはうまくいくでしょう。クエリが実行されるまで、Line-variable-contents の作成を遅らせます。

var query = (from p in Productions
join t in MaterialTransactions
    on p.Prodn_ID equals t.Prodn_ID
where p.WO_ID == 2345
orderby p.Date descending
select new  {
    Id = p.Prodn_ID,
    Date = p.Date,
    Line1 = p.ProdLine.Factory.Factory_No,
    Line2 = p.ProdLine.ProdLine_No,
    Qty = p.Qty,
    Wgt = (double)p.ActWgt,
    Speed = (double)p.ActSpeed,
    MaterialUsed = t.Material.Name
})
.AsEnumerable()
// This is where the db-stuff stops, and the in-memory stuff begins
.Select(p => new {
    p.Id,
    p.Date,
    Line = p.Line1 + '/' + p.Line2.ToString(),
    p.Qty,
    p.Wgt,
    p.Speed,
    p.MaterialUsed
});

var result = query.ToList();
于 2013-09-09T12:27:06.483 に答える
0

linq で数値を文字列に変換してエンティティに変換する場合は、SqlFunctionsを使用する必要があります(ToString()失敗します) 。

(p.ProdLine.Factory.Factory_No + '/' + p.ProdLine.ProdLine_No.ToString())

する必要があります

SqlFunctions.StringConvert((double)p.ProdLine.Factory.Factory_No) + '/' + SqlFunctions.StringConvert((double)p.ProdLine.ProdLine_No);

int をパラメーターとして受け取る StringConvert のオーバーロードがないため、数値を double (または decimal) にキャストする必要があります。

于 2013-09-09T12:39:45.977 に答える