我有以下实体:
CartoonStory
CartoonFigure
性
CartoonStory 由一个或多个 CartoonFigure 告知, CartoonFigure 属于性男性或女性。
当我的网站用户例如是女性时,如果有的话,我只想用性别女性检索CartoonFigures。如果不是这种情况,请改为检索Male CartoonFigures。
所以我得到一个CartoonStory;检查下面是否有女性卡通图片;如果没有,请给出男性卡通图片。
如何在LINQ中执行此操作。如果不是男性,特别是如果它们存在,则该部分采取女性。
提前致谢!
马亭
答案 0 :(得分:2)
在不知道课程的任何细节的情况下,这些内容应该有效:
private static IEnumerable<CartoonFigure> GetFigures(CartoonStory story, Sex preferredSex)
{
var result = story.StoryTellerFigures.Where(cf => cf.Sex == preferredSex);
if (!result.Any())
{
result = story.StoryTellerFigures;
}
return result;
}
换句话说;用故事中的首选性别过滤故事出纳员的数字。如果没有找到,只需返回故事中的所有故事讲述者(他们将是异性)。
答案 1 :(得分:1)
足够简单。通过此代码部分为您的CartoonStory
模型。
partial class CartoonStory
{
public IEnumerable<CartoonFigure> FemalesThenMales
{
get
{
return Females.Count() > 0 ? Females : Males;
}
}
public IEnumerable<CartoonFigure> Females
{
get
{
return CartoonFigures.Where(c => c.Sex.Name == "Female");
}
}
public IEnumerable<CartoonFigure> Males
{
get
{
return CartoonFigures.Where(c => c.Sex.Name == "Male");
}
}
}
编辑(在提问作者的评论之后):
当您准备搜索卡通人物时。
var figures = dataContext.CartoonStories.Where(c => c.Id == 1).FemalesThenMales;
很明显发生了什么。我非常喜欢将代码分解成更小,易于识别的部分。是的,这将作为一个或两个查询发送到数据库(如果找到女性,则为一个;否则为两个)。
不要这样做!!!
var figures = dataContext.CartoonStories.Where(c => c.Id == 1).CartoonFigures.Any(c => c.Sex == "Female") ? dataContext.CartoonStories.Where(c => c.Id == 1).CartoonFigures.Where(c => c.Sex == "Female") : dataContext.CartoonStories.Where(c => c.Id == 1).CartoonFigures.Where(c => c.Sex == "Male");
一个衬里不是他们所有人都被打破的。 :(
答案 2 :(得分:-1)
IEnumerable&lt; CartoonFigure&gt; Cfig = CartoonFigure.OrderBy(W =&gt;(W.Sex ==“Female”)?1:100);
如果首先由女性订购,那么男性......所以,如果有任何女性,你会先得到它。