簡體   English   中英

在Linq查詢中使用表達式的正確語法是什么?

[英]What is the correct syntax for using an expression in a Linq query?

我創建了一個表達式來過濾Linq語句:

Expression<Func<Driver, bool>> expression = null;

這是根據操作參數的值定義的:

switch (driver_type)
{
    case "all": // remove any filters related to `driver_type`
        expression = d => true;
        break;
    case "licensed":
        expression = d => !(new string[] { "A", "B" }).Contains(d.DriverType);
        break;
    case "unlicensed":
        expression = d => d.DriverType == "D";
        break;
    default:
        expression = d => !(new string[] { "A", "B" }).Contains(d.DriverType);
        break;
}

然后用於過濾Linq查詢:

drivers = await (
    from driver in _context.Drivers
    where
        (driver.Active == true)
        && expression <-- invalid
    orderby driver.LastName, driver.FirstName
    select driver
).ToListAsync();

正確的語法是什么?

順便說一句, default開關選項是否可以使用由licensed選項生成的表達式?

您需要將其作為lambda傳遞。 為了使其更具可讀性,您可以將整個表達式更改為使用lambda。

drivers = await _context.Drivers
    .Where(driver => driver.Active)
    .Where(expression)
    .OrderBy(driver => driver.LastName)
    .ThenBy(driver => driver.FirstName)
    .ToListAsync();

暫無
暫無

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

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