[英]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.