我有这两张桌子。
var cardtagtable = (from u in db.CardTagTables
where u.FKCardTagID == cardtable.cardID
select u.CardTagName).ToList();
var tagtable = (from u in db.TagTables
select u.TagName).ToList();
在cardtagtable
中选择所有名称以匹配tagtable
的名称。
条件 -
我想要来自tagtable
的名字,但名称来自cardtagtable
列表。
所以我在这里试过 -
var list = tagtable.Except(cardtagtable);
此list
是除cardtagtable
以外的所有名称的序列。
到目前为止一切都还好。
现在我将使用此list
并将其传递给模型。
var taglist = (from u in list
select new TagModel {
tagId = u.TagID,
tagName = u.TagName,
tagCount = Convert.ToInt32(u.TagCount) == null ? 0 : Convert.ToInt32(u.TagCount),
}).ToList();
但是这个查询说我找不到来自Model
的{{1}}值的定义。
在这种情况下如何使用此列表?
答案 0 :(得分:4)
因为u
可能是string
,因为您的列表是IEnumerable<string>
。原因是您只选择TagNames
,因此您的列表仅包含标记名称,而不是 TagTables 。而您需要选择元素而不仅仅是标记名称:
var cardtagtable = (from u in db.CardTagTables
where u.FKCardTagID == cardtable.cardID
select u).ToList();
var tagtable = (from u in db.TagTables
select u).ToList();
然后使用Where
和Any
代替Except
,如下所示:
var list = tagtable.Where(c => !cardtagtable
.Any(x => x.CardTagName == c.TagName));
然后你的上一个查询应该可以正常工作。
更新:还有更优雅和优化的方法(特别是如果这是LINQ to SQL
)。您只能从CardtagNames
中选择cardtagtable
并使用Contains
方法:
var cardtagtable = (from u in db.CardTagTables
where u.FKCardTagID == cardtable.cardID
select u.CardTagName).ToList();
var tagtable = (from u in db.TagTables
select u).ToList();
var list = tagtable.Where(c => !cardtagtable.Contains(c.TagName));