小编Pea*_*yle的帖子

QueryOver API OrderBy使用Case

如何使用QueryOver API执行以下LINQ to NHibernate查询.这将从DB获取Item的所有记录的列表,并将状态为"Returned"的Items放置到列表的末尾.状态是Enum,它映射到数据库中的nvarchar.

var workList = session.Query<Item>()
                .OrderBy(i=> i.Status == Status.Returned ? 1 : 0)
                .ToList();
Run Code Online (Sandbox Code Playgroud)

SQL等价物是

SELECT *
FROM Item
ORDER BY case when Status='Returned' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我当然试过了

var workList = session.QueryOver<Item>()
                .OrderBy(i => i.Status == Status.Returned ? 1 : 0).Asc
                .ToList();
Run Code Online (Sandbox Code Playgroud)

但我得到以下内容

InvalidOperationException:从范围''引用的'MyProject.Model.Entities.Item'类型的变量'i',但它未定义

我不能使用LINQ,因为在这种情况下有一些其他功能的问题.

nhibernate queryover

8
推荐指数
1
解决办法
1916
查看次数

通过在开头放置以特定字母开头的单词来对字符串列表进行排序

假设我有以下列表:

IList<string> list = new List<string>();
list.Add("Mouse");
list.Add("Dinner");
list.Add("House");
list.Add("Out");
list.Add("Phone");
list.Add("Hat");
list.Add("Ounce");
Run Code Online (Sandbox Code Playgroud)

使用LINQ如何选择包含"ou"的单词并对选择进行排序,以便在开头列出以"ou"开头的单词,然后列出包含但不以"ou"开头的单词.我正在尝试创建的列表将是:

Ounce
Out
House
Mouse
Run Code Online (Sandbox Code Playgroud)

我想出了以下内容,但它无法正常工作:

list.Where(x => x.Contains("ou"))
    .OrderBy(x => x.StartsWith("ou"))
    .Select(x => x);
Run Code Online (Sandbox Code Playgroud)

c# linq list

4
推荐指数
1
解决办法
3574
查看次数

标签 统计

c# ×1

linq ×1

list ×1

nhibernate ×1

queryover ×1