0

このクエリがコンパイルされる理由についてのアイデアはありますが、このランタイム エラーがスローされます。

引数式が無効です

データベースモデルを変更できることはわかっていますが、この場合は不可能です。このようなものを機能させる方法はありますか?これが何と呼ばれるかさえわかりません。ありがとう。

DBContext db = new DBContext();
var books = (from b in db.BOOKS
             select new
             {
                 b.ID,
                 b.NAME,
                 AuthorName = db.PEOPLEs.Where(p=>p.ID==b.AUTHOR).First().USER_ID,
             }).ToList();
4

4 に答える 4

1

let式を使用することで、複雑な内部クエリで最高の運が得られることがわかりました。これにより副選択が実行され、副選択から要素をバインドする柔軟性が高まります。ただし、匿名オブジェクトの作成者の割り当てに対してFirst()を実行しているだけであることに注意してください。これは、First()。PropertyNameを実行してFirstがnull値を生成すると、爆発するためです。

頑張って構文を再確認してください。私はあなたの完全なオブジェクトを設定していないので、完全に機能するデモを生成することはできませんが、これは私が自分のプロジェクトの1つに持っているオブジェクトツリーでテストされました。

var books = (
        from b in db.BOOKs
        let author = (from a in db.PEOPLEs
                      where b.AUTHOR == a.ID
                      select a)
        select new
        {
            ID = b.ID,
            NAME = b.Name,
            Author = author.First()
        }
    ).ToList();    

foreach(var x in books)
{
    string AuthorName = x.Author.USER_ID;
    //Do other stuff
}
于 2011-03-07T20:54:16.300 に答える
0

とにかく、オーバーロードFirst<T>()もあります。つまり、 First<T>(Predicate<T>)

AuthorName = db.PEOPLEs.First(p=>p.ID==b.AUTHOR).USER_ID

メソッド スタイルで LINQ を使用できます。

var books = (from b in db.BOOKS
             let author = db.PEOPLEs.Where(p => p.ID == b.AUTHOR).First()
             select new
             {
                 b.ID,
                 b.NAME,
                 AuthorName = author.USER_ID,
             }).ToList();
于 2011-03-07T20:45:51.500 に答える
0

あなたのコードを見ているなら、あなたは持っています

DBContext db = new DBContext();
var books = (from b in db.BOOKS
select new
{
    b.ID,
    b.NAME,
    AuthorName = db.PEOPLEs.Where(p=>p.ID==b.AUTHOR).First().USER_ID, <<-- Here coma
}).ToList();

そこに別のパラメーターが必要です。それを削除するだけで合格になります

:)

于 2011-03-07T21:06:25.307 に答える
0

したがって、最終的な解決策は次のとおりです。

var books = (
    from b in db.BOOKs
    let author = (from a in db.PEOPLEs
                    where b.AUTHOR == a.ID
                    select a)
    select new
    {
        ID = b.ID,
        NAME = b.Name,
        Author = author.First().USER_ID
    }
).ToList();

ありがとう!

于 2011-03-07T21:47:13.560 に答える