簡體   English   中英

給出多個清單 <int> 在實體框架中使用linq鍵入條件

[英]Giving Multiple List<int> type criteria by using linq in Entity Framework

我正在使用一個使用實體框架的項目。 當人們點擊searchLookUpedit按鈕時我想要簡單的事情我想顯示根據Orders中存在的公司過濾的值。 所以這是代碼:

private void SearchLookUpEdit_Customer_Click(object sender, EventArgs e)
{
    object [] siparisNo = new object[gridView1.RowCount];
    List<Siparisler> siparisList = new List<Siparisler>();
    List<int> firmaIds = new List<int>();

    for (int i = 0; i < gridView1.RowCount; i++)
    {
        siparisNo[i] = gridView1.GetRowCellValue(i,"SiparisNo");
        int sipNo = Convert.ToInt32(siparisNo[i]);
        Siparisler siparis = context.Siparisler.Where(p => p.Id == sipNo).FirstOrDefault();
        siparisList.Add(siparis);
        firmaIds.Add(siparis.Firma_Id);
    }

    for (int i = 0; i < firmaIds.Count; i++)
    {
        int a = firmaIds[i];
        firmalarBindingSource.DataSource = context.Firmalar.Where(p => p.Id == );
    }
}

在這里第二個循環。 讓我們假設在firmaIds<int>列表類型中有3個值。 並假設它們是3,5和8,例如,我想只有這3個公司將在click事件完成運行后存在於firmalarBindingSource.DataSource 我試過但沒有。 如果我的標准是不同的數據類型,則很容易過濾。 反正有沒有這樣做?

如果我理解了你的要求,請嘗試更換

 for (int i = 0; i < firmaIds.Count; i++)
 {
     int a = firmaIds[i];
     firmalarBindingSource.DataSource = context.Firmalar.Where(p => p.Id == );
 }

firmalarBindingSource.DataSource = context.Firmalar.Where(p => firmaIds.Contains(p.Id));

@Faby回答了你的問題,但我只想補充一點,你也可以優化代碼的第一部分,這樣你就可以使用Linq以更多功能的方式完成兩行代碼中的所有操作:

IEnumerable<Firmalar> firmalarDataSource = Enumerable.Range(0, gridView1.RowCount - 1)
    .Select((index) =>
    {
        var siparisId = Convert.ToInt32(gridView1.GetRowCellValue(index, "SiparisNo"));
        var siparis = context.Siparisler.FirstOrDefault(p => p.Id == siparisId);
        return context.Firmalar.FirstOrDefault(f => f.Id == siparis.Firma_Id);

    })
    .Distinct();

firmalarBindingSource.DataSource = firmalarDataSource;

注意 :這些是兩行,但我調整格式更具可讀性;)

如果您重視代碼行的性能,這里是一個三行示例,其中DB的往返次數較少:

var siparisIds = Enumerable.Range(0, gridView1.RowCount - 1)
    .Select(index => Convert.ToInt32(gridView1.GetRowCellValue(index, "SiparisNo")));

var firmaIds = context.Siparisler.Where(p => siparisIds.Contains(p.Id)).Select(s => s.Firma_Id).Distinct();

firmalarBindingSource.DataSource = context.Firmalar.Where(f => firmaIds.Contains(f.Id));

暫無
暫無

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

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