簡體   English   中英

使用 LINQ 進行多選

[英]Multiple Select using LINQ

我有這樣的 LINQ 查詢

ApplicationDbContext context = new ApplicationDbContext();

IEnumerable<InvitationMails> customers = context.InvitationMails
            .Where(c => c.LinkStart == null)
            .AsEnumerable()
            .Select(c => {
                c.LinkStart = start;
                return c;
            });

我需要選擇LinkStartLinkEndLink列,並檢查像這樣的空值。

.Where(c => c.LinkStart == null)
.Where(c => c.LinkEnd == null)
.Where(c => c.Link == null)

但是如何為 select 編寫查詢?

模型

public string Link { get; set; }
public DateTime? LinkStart { get; set; }
public DateTime? LinkEnd { get; set; }

LINQ 允許您選擇所需的任何屬性組合,無需為每個屬性組合定義類型。 當您沒有在Select指定類型時,您的選擇將變成一個匿名對象。 你可以這樣做:

var result = context.InvitationMails
             .Where(c => c.LinkStart == null && c.LinkEnd == null && c.Link == null)
             .Select(c => new { c.LinkStart, c.LinkEnd, c.Link });

result是具有指定屬性的匿名對象。

請注意,只要您不需要將result對象傳遞給任何方法,或從當前方法返回result ,就可以了。 但是,如果您確實需要執行其中任何一項操作,則必須為此創建一個類(或結構)(或者,您可以以犧牲類型推斷/智能感知為代價來使用object )。

另請注意,您不必一個接一個地鏈接Where ,您可以簡單地使用像&&這樣的布爾運算符來分隔您的條件。

編輯:如果您的模型完全由這三個屬性組成,則您根本不需要Select 你可以簡單地這樣做:

var result = context.InvitationMails
             .Where(c => c.LinkStart == null && c.LinkEnd == null && c.Link == null);

請注意,在這種情況下, result將不是匿名類型的IQueryable ,而是InvitationMail (考慮到您的模型名稱是InvitationMail )。

由於您嘗試選擇的屬性並非都屬於同一類型,因此如果要將它們全部保留在同一個IEnumerable ,則需要創建一個struct IEnumerable<pair<string, pair<DateTime?, DateTime?>>>也可以使用,但 struct 解決方案似乎更清晰。

public struct Customer
{
   string Link;
   DateTime? LinkStart;
   DateTime? LinkEnd;

   public Customer(string link, DateTime? linkStart, DateTime? linkEnd)
   {
       this.Link = link
       this.LinkStart = linkStart;
       this.LinkEnd = linkEnd;
   }
}

一旦你有了它,你就可以這樣做:

        .Where(c => c.LinkStart == null)
        .Where(c => c.LinkEnd == null)
        .Where(c => c.Link == null)
        .Select(c => new Customer(c.Link, c.LinkStart, c.LinkEnd));

暫無
暫無

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

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