Optimize Linq code -
tables:
item
id
keyword
id
keyword
itemkeyword
itemid
keywordid
sequencenumber
searching items via keyword:
keyword keyword = keyword.firstordefault(a => a.keyword .equals(input, stringcomparison.invariantcultureignorecase)); ienumerable<item> items = keyword.itemkeyword.orderby(a => a.sequencenumber) .selectmany(a => a.item);
for getting related keywords:
ienumerable<keyword> relatedkeywords = items.itemkeyword .selectmany(a => a.keyword) .except(keyword); ienumerable<keyword> orderedrelatedkeywords = relatedkeywords .orderbydescending(a => relatedkeywords .where(b => b .keyword.equals(a.keyword, stringcomparison.invariantcultureignorecase)) .count()) .distinct();
i don't have development computer me right now, hope idea. real problem here arranging in descending order relatedkeywords times has been used. there ways this? thanks.
hrm, linqtoentities, implies these queries run in database... if queries run in database, aren't string comparisons case insensitive anyway?
here's query form group, , order group's count.
iqueryable<string> orderedkeywords = k in keywords group k.keyword k.keyword g order g.count() descending select g.key; // lambda syntax of above iqueryable<string> orderedkeywords = keywords .groupby(k => k.keyword) .orderbydescending(g => g.count()) .select(g => g.key)
Comments
Post a Comment