2015-05-18 85 views
0

我試圖篩選我LINQ查詢,使用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 }); 
     } 

謝謝你的任何進一步的幫助。

+1

你怎麼宣佈你'Data'類型? –

+0

謝謝你的回覆。 'IQueryable Data = null;'。希望這可以幫助。 – user3070072

+0

「database_B」類型是如何聲明的? –

回答

0

如果database_Bclass(而不是一個struct),其不以合適的方式實現IEquatable<database_B>Distinct會將不同的對象不同,無論部件的值。一個可能的解決方案是實施IEquatable<database_B>以反映對於平等所期望的比較。

或者,Distinct不同過載,可以使用,在那裏它可以給出一個自定義的對比作爲參數。

0

您的類database_B必須實現Equals-和GetHashCode-方法,以告知Distinct在哪些情況下兩個實例被認爲是相等的,因此可能會被濾除。