在SQL Server中按列或使用C#代码对查询结果进行分组的最佳方法

在SQL Server中按列或使用C#代码对查询结果进行分组的最佳方法,c#,sql-server,C#,Sql Server,我正在用C#编写一个搜索表单,我有两个用户可以在其中搜索的表,一个是属性表,另一个是用户表。正如您所知,每个用户可以有多个属性。因此,如果我想在运行查询时找到具有color=red和price X属性的用户,它会给我许多用户,其中一些用户是重复的,我的意思是用户的电话号码是相同的。那么作为一个用户的查询结果,我有这样一个结果吗 User.name|user.phone|product.color|product.price|product.id -------------------------

我正在用C#编写一个搜索表单,我有两个用户可以在其中搜索的表,一个是属性表,另一个是用户表。正如您所知,每个用户可以有多个属性。因此,如果我想在运行查询时找到具有color=red和price X属性的用户,它会给我许多用户,其中一些用户是重复的,我的意思是用户的电话号码是相同的。那么作为一个用户的查询结果,我有这样一个结果吗

User.name|user.phone|product.color|product.price|product.id
-----------------------------------------------------------
a        |9828393999|red          |XX           |yt3
a        |9828393999|red          |XX           |y23
b        |9828393994|red          |XX           |3t3
b        |9828393994|red          |XX           |4t3
这是用户执行的查询结果..如何仅获取电话号码和姓名?我想要这样的东西

User.name|user.phone|product.color|product.price|product.id
-----------------------------------------------------------
a        |9828393999|red          |XX           |y23
b        |9828393994|red          |XX           |4t3
下面是我从用户那里得到的一个示例查询

select 
   u.Name, u.Family, u.OBJECTID, u.phone,
   p.number, p.Energy, p.Area, p.contex, p.title 
from 
   [dbo].[user] as u, [dbo].[PROPERTY] as p 
where 
   u.OBJECTID = p.owner_ID and [contex] = 0 and [title] = 2
无所谓
product.id
,我只想要电话号码。。那么,最好的方法是什么呢? 我可以在SQL Server中执行这样的操作吗?或者我必须使用密码

我可以做的一个方法是在数据之间循环并获取电话号码。但我认为这是一个多么不好的方法…你能帮我找到一个好的解决办法吗


非常感谢

以下是我为这类事情所做的。。。 步骤1)创建类的模型

public class MyModel {
      public string UserName {get;set;}
      public string UserPhone {get;set;}
      public string ProductColor {get;set;}
      public string ProductPrice {get;set;}
      public string ProductID {get;set;}

}
然后我使用Enitity框架将结果投影到该模型中,如下所示

using(var db = new MyEntities(){ 
  string Query = "Select XYZ from Tablea,TableB where something=@parm";      
  SqlParameter[] parms = {new SqlParameter{name = "parm" value="somevalue");       
  var stuff = db.Database.SQLQuery<MyModel>(query, parms.ToArray());
  return stuff.ToList();
}

然后只需将结果绑定到视图,就可以完成所有设置。

您可以在SQL中完成。谷歌搜索“SQL GROUP BY”@MadPhysicast”的一些教程,我试着循环输入结果并获取它可以使用的电话号码,但我认为对于一个包含30000条记录的表格来说,这样做是不好的that@TabAlleman我曾尝试使用此sql语句,但我需要count、Max或min之类的内容,对吗?我应该使用哪一列?我完全不知道如何使用groupby,就像我在问题中提到的那样,你对表的输入是什么,你能清楚地确认吗?wht是其他表的表结构?@knkarthick24我添加了一个示例查询,显示了表的结构,我在问题中添加的是一个查询的结果,我想在步骤3中对结果进行分组。我可以通过电话对数据进行分组?我不这么认为。我的意思是,例如“JustPhoneNumber”会给我一系列重复的数字。对吗?我现在运行代码,看看是什么
var grp = stuff.GroupBy(p=>p.UserPhone);
var justPhoneNumbers = stuff.Where(p=>p.ProductColor=="Red").Select(p=>p.UserPhone).ToList();
var filtered = stuff.Where(p=>p.ProductColor=="Red").ToList();
var filtered2 = stuff.Where(p=>p.ProductColor=="Red");
 filtered2= filtered2.Where(p=>p.UserName == "Jones");
var finallist = filtered2.ToList();