エンティティへのLINQでGUIDに文字列をキャストすることはできません:は、次のコードはLinqPadで正常に動作
(from u in AspNetUsers
let userOrders = (from uo in UserOrders where uo.UserId == new Guid(u.Id) select uo)
select u)
をしかし、私は私のMVCアプリケーションから、まったく同じコードを実行しようとすると、それは私に次のエラーを与えます:
var users = (from u in ctx.Users
let userOrders = (from uo in ctx.UserOrders where uo.UserId == new Guid(u.Id) select uo)
select u);
Only parameterless constructors and initializers are supported in LINQ to Entities.
は私が今までエンティティへのLINQでGUIDに文字列を変換するあらゆる問題を抱えて覚えていません。私はいくつかの参考文献を欠いていますか
は私が考えることができるすべての参照、すでに含まれています:
using System.Linq;
using System.Data.Entity;
をなぜそれがLinqPadではなく、MVCで動作しますか?
編集:は奇妙なことに、これが動作しているようです:
あなたはオブジェクトがまだ実現されていないコンテキスト内にあるlet userOrders = (from uo in ctx.UserOrders where uo.UserId.ToString() == u.Id select uo)
'new Guid(u.Id)' <=これを行うことはできません(例外メッセージに記載されています)。 Linq to Objects(メモリ内)を使用していたら、それを行うことはできますが、データストアでは変換できません。 – Igor
また、これらはカスタムテーブルであると思われますが、おそらくFKが必要な場合は、同じ種類のIDを使用する必要があります。最適なオプションは、タイプが一致するようにストアスキーマを修正することです。 – Igor
スキーマはそれ自体「カスタム」ではなく、ユーザーID(GUID)が文字列として表されているMVCのデフォルトのAspNetUsersから生成されます。私はそれを変更しないことを好み、単純に別のテーブルと照合したいと考えています。文字列を 'uniqueindentifier'に変換できる簡単な関数があるはずです。何か案は? – user1477388