我的Web API控制器有一个方法,可以从数据库表中检索指定数量的描述。有不同ID的重复描述,因此有时在使用SELECT TOP时查询会返回重复项。我还添加了随机(ORDER BY NEWID
)以减少获取重复的机会,但有时仍会返回重复项。我想将查询更改为SELECT DISTINCT但不确定如何在我的特定情况下执行此操作。在这里使用First()似乎很复杂。有人可以帮忙吗?我的方法如下:
public List<String> GetRandomDescriptions(string cat, string subcat, int n)
{
using (MyContext ctx = new MyContext())
{
var temp = ctx.Interactions.Where(d => (d.Category.Equals(cat) && d.Subcategory.Equals(subcat)))).OrderBy(d=>Guid.NewGuid()).Take(n).Select(d=>d.Description).ToList();
return temp;
}
}
这是我的班级:
[Table("[Records]")]
public class Interaction
{
[Key, Column("RECORD_ID")]
public string DescId { get; set;}
public string Category { get; set; }
public string Subcategory { get; set; }
public string Description{get; set;}
}
答案 0 :(得分:1)
你可以使用这样的东西
var result = ctx.Interactions
.Where(d => d.Category == cat && d.Subcategory == subcat)
.Select(d => d.Description)
.Distinct()
.Take(n)
.ToList();
关键点是 - 首先应用过滤器,然后选择描述,然后使其不同,最后获取所需数量的项目。
如果您确实需要选择随机项,请在OrderBy
之前插入Take
。
答案 1 :(得分:0)
你不需要做有趣的OrderBy构造。尝试这样的事情:
public List<String> GetRandomDescriptions(string cat, string subcat, int n)
{
using (MyContext ctx = new MyContext())
{
var temp = ctx.Interactions
.Where(d => d.Category.Equals(cat) && d.Subcategory.Equals(subcat)))
.Select(d=>d.Description)
.Distinct()
.ToList();
return temp;
}
}