[英]Select from list linq
我正在嘗試從linq查詢中獲取匹配項-
public ActionResult TagFilter(TagModel tag) {
List<CardModel> cardlist = null;
var cardtaglist = (from u in db.CardTagTables
where u.CardTagName == tag.tagName
select u).ToList();
cardlist = (from u in db.CardTables
where u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID)
select new CardModel {
cardHashCode = tag.tagName,
cardDate = u.CardDate,
cardFileName = u.CardFileName,
cardFilePath = u.CardFilePath,
cardID = u.CardID,
cardTitle = u.CardTitle
}).ToList();
if (cardlist.Count == 0) {
return Json(new { success = false });
}
else {
return PartialView("_FunHomePartial", cardlist);
}
}
其中tag=>tagName
匹配項將來自列表cardtaglist
。
我Cannot implicitly convert type int to bool
中將Cannot implicitly convert type int to bool
錯誤-
where u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID)
如何匹配列表cardtaglist
中的元素?
如何更換
u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID)
同
cardtaglist.Any(e=>e.FKCardTagID==u.CardID)
首先,如果只使用FKCardTagID
,為什么CardTagTable
選擇所有CardTagTable
實體呢? 最佳方法-僅選擇必填字段:
var cardtagIds = (from u in db.CardTagTables
where u.CardTagName == tag.tagName
select u.FKCardTagID).ToList();
關於錯誤,您打算將IQueriable與數值進行比較。 在這種情況下,可以使用Contains
方法:
cardlist = (from u in db.CardTables.Where(u => cardtagIds.Contains(u.CardID));
select new CardModel {
....
編輯
此外,可以優化此查詢:
cardlist = (from u in db.CardTables.Where(u =>
db.CardTagTables
.Where(ct => ct.CardTagName == tag.tagName)
.Select(ct => ct.FKCardTagID)
.Contains(u.CardID))
select new CardModel {
....
采用:
var result=cardtaglist.Any(e=>e.FKCardTagID==u.CardID)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.