簡體   English   中英

EF4 Linq子選擇查詢出現“參數表達式無效”錯誤

[英]“Argument expression is not valid” error with EF4 Linq sub select query

關於此查詢為何編譯但隨后引發此運行時錯誤的任何想法:

參數表達式無效

我知道我可以更改數據庫模型,但是在這種情況下是不可能的。 任何想法如何使這種工作? 甚至不確定這將被稱為什么。 謝謝。

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();

通過使用let表達式,我發現我對復雜的內部查詢有最好的運氣。 這樣可以進行子選擇,並允許您更大的靈活性來綁定子選擇中的元素。 但是,請注意,我只對匿名對象中的作者分配執行First()。 這是因為如果執行First()。PropertyName並且First產生一個空值,它將被炸毀。

祝您好運並仔細檢查語法。 我沒有設置完整的對象,因此無法生成完全正常的演示,但是,這是在我自己的一個項目中使用的對象樹進行過測試的。

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
}

無論如何, 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();

如果您看一下代碼,就會發現

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();

它期望在那里有另一個參數,只需將其刪除即可。

:)

因此,最終的解決方案是:

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();

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM