gpt4 book ai didi

.net - 多个相似的 linq 查询

转载 作者:行者123 更新时间:2023-12-02 00:24:25 33 4
gpt4 key购买 nike

我有一个模型类(class),它具有多个多对多关系,例如年龄或时间。

我有这个问题:

string IDs = "1,2,3"
string[] IDList = IDs.Split(',');

return (from x in entities.Course
where x.Ages.Where(val => IDList.Contains(val.ID.ToString())).Count() == IDList.Count()
select x);

我需要为时间和其他几个属性设置相同的查询:

string IDs = "1,2,3"
string[] IDList = IDs.Split(',');

return (from x in entities.Course
where x.Times.Where(val => IDList.Contains(val.ID.ToString())).Count() == IDList.Count()
select x);

如何使查询更加动态,这样我就不会有多个类似的查询?

谢谢

最佳答案

您可以创建一个接受Expression 的方法(取决于您的数据类型)并以这种方式运行查询。您需要让您的 AgesTime 等实现特定的接口(interface)才能正常工作。

例如,假设您正在使用 EF 并且您的模型是使用 DbSet 的 Code First,您可以这样做:

public interface IObject
{
int ID { get; set; }
}

public class Age : IObject
{
public int ID { get; set; }

// The rest of the data
}

public class Time : IObject
{
public int ID { get; set; }

// The rest of the data
}

public class Course
{
public virtual ICollection<Age> Ages { get; set; }
public virtual ICollection<Time> Times { get; set; }
}

public class CourseContext : DbContext
{
public DbSet<Course> Course { get; set; }
}

public class Test
{
public IQueryable<Course> GetCourses(Expression<Func<Course, ICollection<IObject>>> exp)
{
var entities = new CourseContext();
string IDs = "1,2,3";
string[] IDList = IDs.Split(',');

var c = exp.Compile();

return entities.Course.Where(x => c.Invoke(x).Count(val => IDList.Contains(val.ID.ToString())) == IDList.Count());
}

public void TestMethod()
{
var times = GetCourses(c => (ICollection<IObject>)c.Times);
var ages = GetCourses(c => (ICollection<IObject>)c.Ages);
}
}

关于.net - 多个相似的 linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415383/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com