gpt4 book ai didi

c# - 如何从 LINQ 表达式中调用方法?

转载 作者:行者123 更新时间:2023-11-30 21:20:18 25 4
gpt4 key购买 nike

我的模型可能是这样的:

    public class Person
{
public virtual Guid ID { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
//this LazyList takes IQueryable<T> in constructor
public virtual LazyList<Role> Roles { get; set; }

//this method to convert the object that comes from EF to my own model
public static Person FromData(DBPerson dbPerson)
{
if (dbPerson != null)
return new Person
{
ID = dbPerson.ID,
FirstName = dbPerson.FirstName,
LastName = dbPerson.LastName,
};

return null;
}
}

然后在我的存储库中,我有方法获取所有人,但我需要将其提供给 LazyList<Role>其他私有(private)方法“getRoles”的属性结果。我的存储库如下所示:

        public IQueryable<Person> GetPersons()
{
var list = from dbPerson in context.Persons
select Person.FromData(dbPerson);
// Here is the problem :(
return list;
}

private LazyList<Role> getRoles(GUID userID)
{
var list = from role in db.Roles
where role.UserID == userID
select role.ToModel();

return new LazyList<Role>(list);
}

我想在这里告诉这个 Linq 语句我希望 Person.Roles 从“getRoles”方法获取它的值

也许有人会告诉我将把 dbPerson 转换为我的 Person 的逻辑放在存储库中,然后放这样的东西:

        public IQueryable<Person> GetPersons()
{
var list = from dbPerson in context.Persons
select new Person{
ID = dbPerson.ID,
FirstName = dbPerson.FirstName,
LastName = dbPerson.LastName,
Roles = getRoles(dbPerson.ID)};
}

好的,但我真的需要将 dbPerson 转换为我的模型的逻辑放在单独的方法中,因为我会在我的解决方案中多次起诉它。

那么怎么做呢?

最佳答案

如何使用单独的方法进行转换?这样您就可以重复使用它。

public  Person ToPerson(dbPerson row, bool getDetails)
{
Person result = new Person{
ID = row.ID,
FirstName = row.FirstName,
LastName = row.LastName};
if(getDetails)
{
result.Roles = getRoles(row.ID)};
}

return result;
}

关于c# - 如何从 LINQ 表达式中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355416/

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