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 });
        }

感谢您的进一步帮助。

你需要这样的东西吗?http://www.codeproject.com/Articles/535374/DistinctBy-in-Linq-Find-Distinct-object-by-Propert

如果database_B是一个class(而不是struct(,它没有以适当的方式实现IEquatable<database_B>,则无论成员值如何,Distinct都会将不同的对象视为不同的对象。一个可能的解决方案是实现IEquatable<database_B>,以反映平等所需的比较。

或者,可以使用Distinct的不同重载,其中可以提供自定义比较作为参数。

您的类database_B必须实现Equals-和GetHashCode方法,以便告诉Distinct在何种情况下两个实例被视为相等,因此可以过滤掉。

相关内容

  • 没有找到相关文章

最新更新