我知道在正常的Linq语法中,orderby xxx descending很容易,但是我如何在Lambda表达式中做到这一点?
我从一个基本类开始,我想使用LINQ在List中操作,如下所示:
public class FooBar
{
public virtual int Id { get; set; }
public virtual string Foo{ get; set; }
public virtual string Bar{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我最终发现使用非lambda LINQ的东西来解决我的问题.
// code somewhere else that works and gets the desired results
var foobarList = GetFooBarList(); // Abstracted out - returns List<Foobar>
// Interesting piece of code that I want to examine
var resultSet = from foobars in foobarList
orderby foobars.Foo, foobars.Bar
select foobars;
// Iterate and do something interesting
foreach …Run Code Online (Sandbox Code Playgroud) 假设我在数据库表中有这些值
id = 1
StartDate = 1/3/2010
EndDate = 1/3/2010
id = 2
StartDate = 1/3/2010
EndDate = 1/9/2010
Run Code Online (Sandbox Code Playgroud)
现在我已经为我的linq订购了这个订单
var hold = MyList.OrderBy(x => x.StartDate).ToList();
Run Code Online (Sandbox Code Playgroud)
我想订购它,但也使用结束日期.
就像我要这样的顺序一样
id 2
id 1
Run Code Online (Sandbox Code Playgroud)
所以endDates这是更好的先行.我不确定是否需要更改它以使用某些比较功能或其他东西.
我正在尝试按价格对产品列表进行排序.
结果集需要按列从低到高的价格列出产品LowestPrice.但是,此列可以为空.
我可以按降序对列表进行排序,如下所示:
var products = from p in _context.Products
where p.ProductTypeId == 1
orderby p.LowestPrice.HasValue descending
orderby p.LowestPrice descending
select p;
// returns: 102, 101, 100, null, null
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚如何按升序排序.
// i'd like: 100, 101, 102, null, null
Run Code Online (Sandbox Code Playgroud) 我有一个linq查询,我想通过f.bar订购,这是一个字符串,但我也想通过f.foo订购它,这是一个布尔字段,首先.喜欢下面的查询.
(from f in foo
orderby f.foo, f.bar
select f)
Run Code Online (Sandbox Code Playgroud)
虽然这个编译它没有按预期工作.它只是通过f.bar命令忽略布尔字段.
我知道,我是愚蠢的,但是我需要做些什么才能得到这种行为?
谢谢
我有一个方法,给出参数"bool sortAscending".现在我想使用LINQ根据此参数创建排序列表.我得到了这个:
var ascendingQuery = from data in dataList
orderby data.Property ascending
select data;
var descendingQuery = from data in dataList
orderby data.Property descending
select data;
Run Code Online (Sandbox Code Playgroud)
如您所见,两个查询仅在"升序"中有所不同."降".我想合并两个查询,但我不知道如何.有人有答案吗?
我有一节课:
public class MyObject
{
public string Name;
public int Age;
}
Run Code Online (Sandbox Code Playgroud)
我有一个Myobject对象列表:
Name Age
ABC 12
BBC 14
ABC 11
Run Code Online (Sandbox Code Playgroud)
如何使用条件对此列表进行排序:首先排序名称,然后排序年龄.使用此列表,排序后的结果:
Name Age
ABC 11
ABC 12
BBC 14
Run Code Online (Sandbox Code Playgroud) 可能重复:
LINQ中有多个"order by"
我有一个订单清单,我需要在订单日期订购,然后按订单价格进行二次排序.因为我尝试过order.OrderBy(o => o.Date).OrderBy(o => o.Price),我不确定这是怎么做到的,但它不起作用.任何帮助深表感谢.谢谢
目的是按父项对列表进行排序,然后是子项(只有一个子项).
Example Set:
ID ParentId Type Unit
1 NULL Energy kJ
2 1 Cal
3 NULL Protein g
4 NULL Fat, total g
5 4 Saturated g
6 NULL Carbohydrate g
7 6 Sugars g
8 NULL Dietary fibre g
10 NULL Sodium mg
11 NULL Potassium mg
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果我按类型(字母顺序)排序,它就会出现
(来自Julia Lerman的新实体框架书中的一个例子.)我有一个包含两个表的数据库,联系人和地址.Contact表有一个ContactID(int),以及名字,姓氏等.地址表有一个ContactID,以及city,state,zip等.
这是一个简单的LINQ查询:
var addressGraphQuery = from a in context.Addresses.Include("Contact")
orderby a.Contact.LastName, a.Contact.FirstName
select a;
Run Code Online (Sandbox Code Playgroud)
从SQL事件探查器,我看到以下内容:
SELECT
[Extent1].[addressID] AS [addressID],
[Extent1].[City] AS [City],
[Extent1].[StateProvince] AS [StateProvince],
-- etc
[Extent3].[ContactID] AS [ContactID1],
[Extent3].[FirstName] AS [FirstName],
[Extent3].[LastName] AS [LastName],
-- etc
FROM [dbo].[Address] AS [Extent1]
INNER JOIN [dbo].[Contact] AS [Extent2] ON [Extent1].[ContactID] = [Extent2].[ContactID]
LEFT OUTER JOIN [dbo].[Contact] AS [Extent3] ON [Extent1].[ContactID] = [Extent3].[ContactID]
ORDER BY [Extent2].[LastName] ASC, [Extent3].[FirstName] ASC
Run Code Online (Sandbox Code Playgroud)
它连接两次联系表!为什么?有没有一种简单的方法来防止这种情况?
神秘感加深了.当我删除orderby时,连接消失.当我设置时,连接不会消失context.ContextOptions.LazyLoadingEnabled = false.
这里也有一个类似的问题:
我会看看是否有更高的功率我可以问...