[英]EF how to avoid same data in .select
I am working with Entity Framework.我正在使用实体框架。 I am retrieving data using a query with
.Where
and .Select
conditions.我正在使用带有
.Where
和.Select
条件的查询来检索数据。
var myData = await _dbContext.Samples.Include(i => i.Experiment)
.Include(i => i.Experiment.Test)
.Include(i => i.Experiment.Test.Project)
.Include(i => i.Samples)
.Where(i => i.Experiment.Test.Status == 3 && i.Experiment.Test.TestId == 3)
.Select( e => new ExperimentCollections() {
ExperimentNumber = e.Experiment.Test.ExperimentNumber,
ExperimentName = e.Experiment.Test.Project.Name
}).ToListAsync();
There can be multiple rows with the same ExperimentNumber
and I need to avoid it from inserting into myData
.可以有多行具有相同的
ExperimentNumber
,我需要避免将其插入myData
。
For example: in myData
:例如:在
myData
中:
myData[0]
ExperimentNumber: 1520,
ExperimentName: ABC
myData[1]
ExperimentNumber: 1521,
ExperimentName: EFG
myData[2]
ExperimentNumber: 1520,
ExperimentName: HIJ
I need to avoid myData[2]
data to be inserted into myData
using Entity Framework in single single query without using foreach loop.我需要避免在单个查询中使用实体框架将
myData[2]
数据插入到myData
中,而不使用 foreach 循环。
I tried following code with.Distinct()我尝试使用.Distinct() 进行以下代码
var myData = await _dbContext.Samples.Include(i => i.Experiment)
.Include(i => i.Experiment.Test)
.Include(i => i.Experiment.Test.Project)
.Include(i => i.Samples)
.Where(i => i.Experiment.Test.Status == 3 && i.Experiment.Test.TestId == 3)
.Select( e => new ExperimentCollections() {
ExperimentNumber = e.Experiment.Test.ExperimentNumber,
ExperimentName = e.Experiment.Test.Project.Name
}).Distinct().ToListAsync();
And I even tried.Distinct().OrderBy(i => i.TestNumber) too.我什至也尝试过.Distinct().OrderBy(i => i.TestNumber)。
The GROUP BY
statement is often used with aggregate functions ( COUNT, MAX, MIN, SUM, AVG
) to group the result-set by one or more columns. GROUP BY
语句通常与聚合函数( COUNT, MAX, MIN, SUM, AVG
)一起使用,以按一列或多列对结果集进行分组。
After Where clause use GROUP BY column_name(s)
.在 Where 子句之后使用
GROUP BY column_name(s)
。
You can try to use Extend method to avoid same data in the list.您可以尝试使用 Extend 方法来避免列表中的相同数据。
public static class Extend
{
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
}
You can use it like the following code:您可以像下面的代码一样使用它:
var query = data.DistinctBy(p => p.ExperimentNumber).ToList();
foreach (var item in query)
{
Console.WriteLine(item.ExperimentName+" "+item.ExperimentNumber);
}
Result:结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.