public List<HDOrderDto> FindHistory(string pat_guid,DateTime startDate, DateTime endDate)
{
if (String.IsNullOrWhiteSpace(pat_guid)) return null;
var query = (from x in _repo.HD_ORDER
where x.PAT_GUID == pat_guid && x.ODR_DATE >= startDate && x.ODR_DATE <= endDate
select new HDOrderDto
{
HDType = x.HD_TYPE,
OdrDate = x.ODR_DATE,
DryWtDesc = x.DRY_WT_DESC,
DryWtReasonDesc = x.DRY_WT_REASON_DESC
}).Distinct().OrderByDescending(x=>x.OdrDate).ToList<HDOrderDto>();
return query;
}
這是我的程式碼,主要是想顯示出HDOrderDto裡的欄位並照日期順序排列這樣,現在
我想做一個重覆內容不顯示的查詢,想請問是否需要再加上groupby這語法?只是這語
法我不太會下能否為我解答一下?謝謝。
現在我想做一個重覆內容不顯示的查詢,想請問是否需要再加上groupby這語法?
不需要GroupBy,你已經使用Distinct,除非你有分組需求
舉例:
var list = new List<dynamic>() {
new {id="1",value="no1",value2="no2"},
new {id="1",value="no1",value2="no2"}
};
var result = list.Select(s => new { s.id,s.value} ).Distinct();
// result結果:
// id,value
// 1,no1
原始數據
ID | ProjectName | Price | Country | CreateDatetime |
---|---|---|---|---|
1001 | hello_kity | 1000 | TW | 2017/04/07 |
1002 | hulk | 2000 | TW | 2017/04/05 |
1003 | hulk | 2000 | US | 2017/04/06 |
期望得到
ProjectName | Price |
---|---|
hello_kity | 1000 |
hulk | 2000 |
回答:
使用GroupBy+Select Key
void Main()
{
var datas = JsonConvert.DeserializeObject<List<Tourism>>(@"
[
{
""ID"": 1001,
""ProjectName"": ""hello_kity"",
""Price"": 1000,
""Country"": ""TW"",
""CreateDatetime"": ""2017/04/07""
},
{
""ID"": 1002,
""ProjectName"": ""hulk"",
""Price"": 2000,
""Country"": ""TW"",
""CreateDatetime"": ""2017/04/05""
},
{
""ID"": 1003,
""ProjectName"": ""hulk"",
""Price"": 2000,
""Country"": ""US"",
""CreateDatetime"": ""2017/04/06""
}
]
");
var result = datas.GroupBy(g => new { g.ProjectName, g.Price }).Select(s => new { s.Key.ProjectName,s.Key.Price});
}
// Define other methods and classes here
public class Tourism
{
public int ID { get; set; }
public string ProjectName { get; set; }
public int Price { get; set; }
public string Country { get; set; }
public string CreateDatetime { get; set; }
}
你好,我有遇到跟這個網站所說的一樣的問題
http://andy51002000.blogspot.com/2017/04/c-linq.html
所以我才想要不要也跟他一樣加個groupby這樣
文中解釋怪怪的
除非你要做分組動作,不要然不需要加Group
舉例,文中資料如以下:
ID | ProjectName | Price | Country | CreateDatetime |
---|---|---|---|---|
1001 | hello_kity | 1000 | TW | 2017/04/07 |
1002 | hulk | 2000 | TW | 2017/04/05 |
1003 | hulk | 2000 | US | 2017/04/06 |
文中作者使用select CreateDatetime再做distinct當然無法去重,因為值不一樣
,跟order沒有關係
。
我看他是說因為他後來做了排序才會無法出現想要的結果,剛好我也是
這樣。後來我找到的是不用distinct跟groupby,直接在controller
裡用foreach來處理,所以現在我在想有沒有辦法不動到ocmtroller
就能有解的方法。
List<HDOrderDto> dtos = hsrv.FindHistory(pat.PatGuid, model.StartDate, model.EndDate);
dtos = dtos.Where(x => x.DryWtDesc != null && x.DryWtDesc != "").ToList<HDOrderDto>();
string lastDryWt = "";
foreach (HDOrderDto dto in dtos)
{
if (!String.IsNullOrWhiteSpace(dto.DryWtDesc) && dto.DryWtDesc != lastDryWt)
{
lastDryWt = dto.DryWtDesc;
model.HDOrders.Add(dto);
}
}
有參考數據跟期望數據嗎?
可以參考別人文章提問方式:請問如何抓出 '20歲以下' 佔總會數前25% 的所有總會數跟總資產和平均資產和人數? - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
舉例:
原始數據
ID | ProjectName | Price | Country | CreateDatetime |
---|---|---|---|---|
1001 | hello_kity | 1000 | TW | 2017/04/07 |
1002 | hulk | 2000 | TW | 2017/04/05 |
1003 | hulk | 2000 | US | 2017/04/06 |
期望得到
ProjectName | Price |
---|---|
hello_kity | 1000 |
hulk | 2000 |
對,就是類似您的舉例範例所呈現的結果,不好意思,下次我會改進