簡體   English   中英

Linq 查詢 - 來自.Net MVC Core 3.1,實體框架中一張表的條件依賴列

[英]Linq query - conditional dependent columns from one table in .Net MVC Core 3.1, Entity Framework

數據庫表結構

數據庫表結構

我想達到什么目標?

  1. 我正在使用來自視圖組件的 Linq 查詢。 我必須檢查 Column1 中是否有“No”狀態,然后應該選擇 Column2 中的 data2b。 同樣,如果 Column3 中的狀態為“No”,則應選擇 Column4 中的 data4a 和 data4c。 go 與 Column6 和 Column8 相同。
  2. 所以 Column1 和 Colum2、Column3 和 Colum4、Column5 和 Colum6 以及 Column7 和 Colum8 是有條件地相互依賴的。 Column1 的狀態不應影響 column4。
  3. 在 Column3 的第一行中,“No”狀態應該給出 data4a,column7 中的 No 狀態應該給出 column8 中的 data8a。
  4. 狀態存儲為枚舉。

到目前為止,這是我嘗試過的:

public class NotOkeyViewComponent : ViewComponent
{
    private readonly DbContext _context;
    public NotOkeyViewComponent(DbContext context)
    {
        _context = context;
    }
    public Tuple<int, Guid> getFormInfo()
    {
        var CustomerGuid = Guid.Parse((string)TempData["CustomerId"]);
        var FormId = _context.Forms
        .Where(t => t.CompanyId == CustomerGuid)
        .Where(t => t.FormType.Contains("CustomerForm"))
        .Select(t => t.Id)
        .First();
        TempData.Keep();
        return new Tuple<int, Guid>(FormId, CustomerGuid);
    }
    public IViewComponentResult Invoke()
    {
        var FormTuple = getFormInfo();
        var query = _context.Dbtables
                .Where(x => x.RecStatus == 'A' &&
                        x.Form.Id == FormTuple.Item1 &&
                        x.Form.CompanyId == FormTuple.Item2) // Item2: CustomerGuid; 
                .Where(x => x.Column1.Equals(StatusEnum.Ei))                        
                .Select(x => x.Column2)  
                .Where(x => x.Column3.Equals(StatusEnum.Ei))
                .Select(x => x.Column4);                        
        TempData.Keep();
        List<Dbtable> model = query.ToList();
        return View(model);
    }
}

當我使用 Where 查詢時,這將返回 false 並且不會選擇任何列,這是我不想要的。 我仍然希望它檢查 Column3、Column5 和 Column7,並在條件滿足時從 Column4、Column6 和 Column8 中進行選擇。 如何使 Column1 僅依賴於 Column2 並且可以一次完成所有查詢?

// StatusEnum
public enum StatusEnum 
{ 
    [Display(Name ="Yes")]
    Yes = 0,
    [Display(Name = "No")]
    No = 1,
    [Display(Name = "Not Known")]
    Not_Known = 2
}

此查詢可以通過條件運算符輕松完成。 您不需要Where過濾記錄,但您需要從記錄中選擇適當的值。

_context.Dbtables
    .Where(x => x.RecStatus == 'A' &&
            x.Form.Id == FormTuple.Item1 &&
            x.Form.CompanyId == FormTuple.Item2)
    .Select(x => 
        x.Column1 == StatusEnum.Yes ? x.Column2 : 
        x.Column3 == StatusEnum.Yes ? x.Column4 :
        x.Column5 == StatusEnum.Yes ? x.Column6 :
        x.Column7 == StatusEnum.Yes ? x.Column8 :
        null
    );

暫無
暫無

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

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