反正有没有做LINQ2SQL查询做类似的事情:
var result = source.GroupBy(a => new { a.Column1, a.Column2 });
Run Code Online (Sandbox Code Playgroud)
要么
var result = from s in source
group s by new { s.Column1, s.Column2 } into c
select new { Column1 = c.Key.Column1, Column2 = c.Key.Column2 };
Run Code Online (Sandbox Code Playgroud)
但忽略了分组列内容的情况?
我有这个查询,我希望用Linq替换为查询语法:
select
ii.Id, ii.Name as Supplier,
qi.Price1, qi.Price2, qi.Price3,
case when qi.price1 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price1,1000000) ASC) end AS Price1Order,
case when qi.price2 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price2,1000000) ASC) end AS Price2Order,
case when qi.price3 is null then NULL else ROW_NUMBER() OVER(ORDER BY isNull(qi.price3,1000000) ASC) end AS Price3Order
From dbo.InquiryItems ii
left join dbo.quoteItems qi on ii.Id = qi.QuoteItem_InquiryItem
Run Code Online (Sandbox Code Playgroud)
SQL查询结果:
Id Supplier Price1 Price2 Price3 Price1Order Price2Order Price3Order
1655 Supplier 2 …Run Code Online (Sandbox Code Playgroud) 我对LINQ很新,我最初使用它的一个尝试必须超级复杂!
我试图在这个Stack Over问题中调整已接受的答案.
我这样写了:
using (var ctx = new MyEntities())
{
var q = ctx.tblPrices.OrderByDescending(x => x.Cost)
.GroupBy(x => x.ItemID)
.Select(g => new {g, count = g.Count()})
.SelectMany(t => t.g.Select(b => b).Zip(Enumerable.Range(1, t.count), (j, i) => new {j.WebPrice, j.PriceID, j.ItemID}));
foreach (var i in q)
{
sb.AppendFormat("Id = {0}, Name = {1}, ItemId = {2}<hr/>", i.WebPrice, i.PriceID, i.ItemID);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想从不同供应商那里退回相同商品的最便宜价格.
但是,当我运行项目时,我得到以下很长的错误消息,我不知道它意味着什么.但它看起来很严重!
LINQ to Entities无法识别方法'System.Collections.Generic.IEnumerable
1[<>f__AnonymousType53 [System.Nullable1[System.Decimal], System.Int32,System.Int32]] Zip[tblPrice,Int32,<>f__AnonymousType53](System.Collections.Generic.IEnumerable1[MyProjectMVC.Models.tblPrice], System.Collections.Generic.IEnumerable1 [System.Int32],System.Func3[MyProjectMVC.Models.tblPrice,System.Int32, <>f__AnonymousType5 …
我有许多字符串,如"20120117"和"20120321".我需要使用以下格式的新字符串转换它:"2012/01/17"和"2012/03/21".那么,有一种方法可以做到这一点?
我尝试:
string dateString = string.format("{0:d", "20120321");
Run Code Online (Sandbox Code Playgroud)
和
string dateString = string.format("{0:yyyy/MM/dd", "20120321");
Run Code Online (Sandbox Code Playgroud)
和
string dateString = int.Parse("20120321").ToString("yyyy/MM/dd");
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我都达不到目标.= /
所以,我可以这样做吗?
OBS:有一种方法可以做到这一点,而无需解析到日期时间?