私はlinqが初めてです。以下のような2 つの列 ( AnonymousUser.AnonymousId
beinguniqueidentifier
と comment.UserId being )を結合するクエリを実行する必要があります。nvarchar(100)
using (CommentEntities db = new CommentEntities())
{
// filteredComments is a query that is not run until the next .ToList()
IQueryable<Comment> filteredComments = this.CommentGetList(...);
var query = from comment in filteredComments
// following line is the syntax error, because columns' types don't match
join user in db.AnonymousUsers on comment.UserId equals user.AnonymousId into gj
from userNull in gj.DefaultIfEmpty()
select new CommentWithName
{
Comment = comment,
UserId = comment.UserId,
FirstName = (userNull == null ? "" : userNull.Name),
LastName = "",
Email = (userNull == null ? "" : userNull.Email)
};
return query.ToList();
}
まず、クエリを.ToString()
!で書いてよかったです。エンティティ フレームワークは、それを SQL に変換する方法を認識していないことが判明しました。についても同様ですGuid.Parse(string)
。またnew Guid(string)
、エンティティへの linq では使用できません (パラメーターなしのコンストラクターのみが許可されます)。
検索した結果、EF 4.0 ではそのようなことはできないことがわかりました。コードをストアド プロシージャに移行しましたが、あまり満足していません。
エンティティ フレームワークCAST
に SQL で a を使用するように指示することは可能ですか?
この問題の解決策はありますか? ロジックをコードに組み込む方法はありますか?
注: 1 回の GOで実行するつもりでした。それ以外の場合、考えられる解決策の 1 つは、最初のテーブルからエンティティを取得し、ID をリストに入れて、2 番目のテーブルからエンティティを取得することです。