LINQ选择查询问题

时间:2009-12-15 20:36:10

标签: c# linq-to-sql

我有以下实体:

CartoonStory

CartoonFigure

CartoonStory 由一个或多个 CartoonFigure 告知, CartoonFigure 属于男性或女性。

当我的网站用户例如是女性时,如果有的话,我只想用性别女性检索CartoonFigures。如果不是这种情况,请改为检索Male CartoonFigures。

所以我得到一个CartoonStory;检查下面是否有女性卡通图片;如果没有,请给出男性卡通图片。

如何在LINQ中执行此操作。如果不是男性,特别是如果它们存在,则该部分采取女性。

提前致谢!

马亭

3 个答案:

答案 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);

如果首先由女性订购,那么男性......所以,如果有任何女性,你会先得到它。