簡體   English   中英

Distinct()Linq查詢

[英]Distinct() linq query

我正在嘗試使用distinct()方法過濾我的linq查詢,但我一直在獲取所有數據記錄(包括重復數據)。 我嘗試了以下變種,但似乎都失敗了。

           int total = Data.Count();

           // Data = Data.GroupBy(member => member.Tag).Select(x => x.OrderBy(y => y.Name).First());

           // Data = Data.OrderByDescending(c => c.UploadDate);

            Data = Data.Distinct().OrderBy(value => value.Tag);

            var data = Data.ToList();

如何顯示所有由唯一tags字段名稱過濾的數據字段名稱來過濾查詢? 我的tag字段名也包含NULL數據。

這是我的整個方法,以供進一步參考:

        [Authorize]
    [HttpPost]
   private HttpResponseMessage method(HttpContext request, Query query)
    {
        if (User.IsInRole("admin") || User.IsInRole("art"))
        {
            IQueryable<database_B> Data = null;

            if (!string.IsNullOrEmpty(query.name))
            {
                var ids = query.name.Split(',');

               // var dataMatchingTags = db.database_B.Where(c => ids.Any(id => c.Name.Contains(id)));

                if (Data == null)
                    Data = dataMatchingTags;
                else
                    Data = Data.Union(dataMatchingTags);
            }

            if (Data == null) // If no tags or name is being queried, apply filters to the whole set of products
                Data = db.database_B;

            if (query.endDate != null)
            {
                Data = Data.Where(c => c.UploadDate <= query.endDate);
            }

            if (query.startDate != null)
            {
                Data = Data.Where(c => c.UploadDate >= query.startDate);
            }

            int total = Data.Count();

           // Data = Data.GroupBy(member => member.Tag).Select(x => x.OrderBy(y => y.Name).First());

           // Data = Data.OrderByDescending(c => c.UploadDate);

            Data = Data.Distinct().OrderBy(value => value.Tag);

            var data = Data.ToList();

            if (!data.Any())
            {
                var message = string.Format("No data found");
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
            }

           // return Request.CreateResponse(HttpStatusCode.OK, data);
            return Request.CreateResponse(HttpStatusCode.OK, new { total, data });
        }

感謝您的進一步幫助。

如果database_B是不能以適當方式實現IEquatable<database_B>class (與struct相對),則Distinct會將不同的對象視為不同的對象,而不考慮成員值。 一種可能的解決方案是實現IEquatable<database_B>以反映相等所需的比較。

或者,可以使用不同的Distinct重載,可以在其中給出自定義比較作為參數。

您的類database_B必須實現Equals-和GetHashCode-Method,以便告訴Distinct在哪種情況下認為兩個實例相等,因此可以將其過濾掉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM