この質問 ( linq で groupby を使用するときに複数の結合を行う方法) の複製ではなく、状況が変わりました。
データベースに画像評価テーブルがあります。新しい評価ごとに、新しい画像評価テーブルの行が作成されます。これらの評価を lastweek と pictureid でグループ化しています。つまり、先週の 1 つの pic に対するすべての評価が蓄積され、1 つの評価になります。その後、カウントで並べ替えることができます。次に、他の 2 つのテーブルに参加しています。2 つのテーブルには、ユーザーと画像に関連する詳細が表示されます。
これは私のコードです:
public IQueryable<SortedDto> GetOne()
{
var pastDate = DateTime.Now.Date.AddDays(-1);
var combo = from l in db.picturerating
where l.iddatetime > pastDate
group l by l.idpictures into pgroup
let count = pgroup.Count()
orderby count descending
join p in db.picturedetails on pgroup.FirstOrDefault().idpictures equals p.idpictures into first
join u in db.users on pgroup.FirstOrDefault().iduser equals u.iduser into second
select new SortedDto
{
IdPictures = pgroup.FirstOrDefault().idpictures,
IdUser = pgroup.FirstOrDefault().iduser,
IdDatetime = first.FirstOrDefault().pictime,
totalrating = pgroup.Average(l => (float?)l.rating) ?? 0, sex =second.FirstOrDefault().sex,
username =second.FirstOrDefault().username,
dob = second.FirstOrDefault().dob
};
return combo;
}
このコードを実行すると、次のような例外が発生します。
InnerException: {
Message: "エラーが発生しました。"、
ExceptionMessage: "'where 句' の不明な列 'Apply1.idpictures'"、
ExceptionType: "MySql.Data.MySqlClient.MySqlException"スタックトレース:
MySql.Data.MySqlClient.MySqlStream.ReadPacket()
で MySql.Data.MySqlClient.NativeDriver.GetResult(Int32&ectedRow、Int64&insertId)でMySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) で MySql.Data.MySqlClient.MySqlDataReader.NextResult() で MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) で MySql.Data.Entity.EFMySqlCommand .ExecuteDbDataReader(CommandBehavior 動作) で System.Data.Common.DbCommand.ExecuteReader(CommandBehavior 動作) で System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior 動作)
では、なぜこの例外が発生するのでしょうか? 私のlinqクエリに何か問題がありますか?