Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据项目喜好、项目连接和项目评级查找最佳项目_C#_Linq - Fatal编程技术网

C# 根据项目喜好、项目连接和项目评级查找最佳项目

C# 根据项目喜好、项目连接和项目评级查找最佳项目,c#,linq,C#,Linq,我有这张桌子: 普卢项目 PC_项目连接 PR_项目评级 p_项目 页面布局 这是我的链接查询: List<PProject> p = ctx.PProject.Where(x => x.PCountryCode == cC && x.PParentalGuidence == r).ToList(); List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n =&

我有这张桌子:

普卢项目

PC_项目连接

PR_项目评级

p_项目

页面布局

这是我的链接查询:

List<PProject> p = ctx.PProject.Where(x => x.PCountryCode == cC && x.PParentalGuidence == r).ToList();
List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
通过每个项目的评分总和,哪一个项目有效并获得最佳项目,但我如何结合其他两个查询来找到最佳项目

这是答案还是只得到最后一组的查询:

                List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
                pppp = pppp.OrderBy(c => p0.Contains(c.PlPId) ? p0.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0p.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0pp.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
List pppp=ctx.PlPageLayout.Where(x=>p.Select(n=>n.PIdG).Contains(x.PlPId)).ToList();
pppp=pppp.OrderBy(c=>p0.Contains(c.PlPId)?p0.IndexOf(c.PlPId):int.MaxValue.ToList();
pppp=pppp.OrderBy(c=>p0p.Contains(c.PlPId)?p0p.IndexOf(c.PlPId):int.MaxValue.ToList();
pppp=pppp.OrderBy(c=>p0pp.Contains(c.PlPId)?p0p.IndexOf(c.PlPId):int.MaxValue.ToList();
每一次我喜欢一个项目,因为我正在测试它,将项目向下推,这样上面的代码就不起作用了,而是取得了一些进展

                List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
                pppp = pppp.OrderBy(c => p0.Contains(c.PlPId) ? p0.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0p.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0pp.Contains(c.PlPId) ? **p0pp**.IndexOf(c.PlPId) : int.MaxValue).ToList();
List pppp=ctx.PlPageLayout.Where(x=>p.Select(n=>n.PIdG).Contains(x.PlPId)).ToList();
pppp=pppp.OrderBy(c=>p0.Contains(c.PlPId)?p0.IndexOf(c.PlPId):int.MaxValue.ToList();
pppp=pppp.OrderBy(c=>p0p.Contains(c.PlPId)?p0p.IndexOf(c.PlPId):int.MaxValue.ToList();
pppp=pppp.OrderBy(c=>p0pp.Contains(c.PlPId)?**p0pp**.IndexOf(c.PlPId):int.MaxValue.ToList();

我已经在上整理了一些测试代码,但我不确定您的问题。我想你可以在创建结果列表时对它们进行排序,还是我只是误解了这个问题

public class PlProjectLike
{
    public int PlId { get; set; }
    public Guid PlPIdG { get; set; }
    public int PlUId { get; set; }
    public string PlValue { get; set; }
    public DateTime PlCreatedDate { get; set; }
}

public class PcProjectConnect
{
    public int PcId { get; set; }
    public Guid PcPIdG { get; set; }
    public int PcUId { get; set; }
    public DateTime PcCreatedDate { get; set; }
    public string PcStatus{ get; set; }
}

public class PrProjectRating
{
    public int PrId { get; set; }
    public int PrUId { get; set; }
    public string PrText { get; set; }
    public int PrValue { get; set; }
    public Guid PrPIdG { get; set; }
    public DateTime PrCreatedDate { get; set; }
    public bool PrIsDeleted{ get; set; }
}

public class PProject
{
    public int PId { get; set; }
    public Guid PIdG { get; set; }
    public string PName { get; set; }
    public DateTime PDateCreated { get; set; }
    public bool PDeleted { get; set; }
    public int PUId { get; set; }
    public int PTtId { get; set; }
    public string PCountry { get; set; }
    public string PCountryCode { get; set; }
    public string PParentalGuidence { get; set; }
    public string PConnectionType { get; set; }
}

public class PlPageLayout
{
    public int PLId { get; set; }
    public Guid PlPId { get; set; }
    public string PLName { get; set; }
}

public class CTX
{
    public List<PProject> PProject { get; set; }
    public List<PlPageLayout> PlPageLayout { get; set; }
    public List<PlProjectLike> PlProjectLike { get; set; }
    public List<PrProjectRating> PrProjectRating { get; set; }
    public List<PcProjectConnect> PcProjectConnect { get; set; }

    public CTX()
    {
        PProject = new List<PProject>();
        PlPageLayout = new List<PlPageLayout>();
        PlProjectLike = new List<PlProjectLike>();
        PrProjectRating = new List<PrProjectRating>();
        PcProjectConnect = new List<PcProjectConnect>();
    }
}

public class LikeGroup
{
    public int sumR { get; set; }
    public Guid pidG { get; set; }
}
public class Program
{
    public static void Main(string[] args)
    {
        CTX ctx = new CTX();
        String r = "R";
        string cC = "us";

        // Select project for country and rating
        List<PProject> p = ctx.PProject.Where(x => x.PCountryCode == cC && x.PParentalGuidence == r).ToList();
        // List of PlPageLayouts where the PlPId is in the selected PProject list
        List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
        // List of Count/PlPIdG from PlProjectLike where the PlValue is 'Like' Ordered by the count descending
        List<LikeGroup> plike = ctx.PlProjectLike.Where(x => x.PlValue == "Like").Select(c => c).GroupBy(g => new { g.PlPIdG }, (key, group) => new LikeGroup() { sumR = group.Count(), pidG = key.PlPIdG }).OrderByDescending(dat => dat.sumR).ToList();
        // List of Sum(PrValue)/PlPIdG from PrProjectRating where PrIsDeleted is false Ordered by the Sum(PrValue) descending
        List<LikeGroup> prating = ctx.PrProjectRating.Where(x => x.PrIsDeleted == false).Select(k => k).GroupBy(g => new { g.PrPIdG }, (key, group) => new LikeGroup(){ sumR = group.Sum(k => k.PrValue), pidG = key.PrPIdG }).OrderByDescending(dat => dat.sumR).ToList();
        // List of Count/PlPIdG from PcProjectConnect where PcStatus is Connected Ordered by the count descending
        List<LikeGroup> pconnect = ctx.PcProjectConnect.Where(x => x.PcStatus == "Connected").Select(c => c).GroupBy(g => new { g.PcPIdG }, (key, group) => new LikeGroup() { sumR = group.Count(), pidG = key.PcPIdG }).OrderByDescending(dat => dat.sumR).ToList();

        List<PlProjectLike> OrderedProjectLikeList = 
            (from pl in ctx.PlProjectLike 
             join ord in plike on pl.PlPIdG equals ord.pidG 
             orderby ord.sumR descending 
             select pl).ToList();

        List<PrProjectRating> OrderedPrProjectRatingList = 
            (from pr in ctx.PrProjectRating
             join ord in prating on pr.PrPIdG equals ord.pidG
             orderby ord.sumR descending
             select pr).ToList();

        List<PcProjectConnect> OrderedPcProjectConnectList =
            (from pc in ctx.PcProjectConnect
             join ord in prating on pc.PcPIdG equals ord.pidG
             orderby ord.sumR descending
             select pc).ToList();

    }
}
公共类PlProjectLike
{
公共整数PlId{get;set;}
公共Guid PlPIdG{get;set;}
公共整数PlUId{get;set;}
公共字符串PlValue{get;set;}
公共日期时间PlCreatedDate{get;set;}
}
公共类PcProjectConnect
{
公共int PcId{get;set;}
公共Guid PcPIdG{get;set;}
公共int PcUId{get;set;}
公共日期时间PcCreatedDate{get;set;}
公共字符串PcStatus{get;set;}
}
公营评级
{
公共int PrId{get;set;}
public int PrUId{get;set;}
公共字符串PrText{get;set;}
公共int PrValue{get;set;}
公共Guid PrPIdG{get;set;}
公共日期时间PrCreatedDate{get;set;}
公共布尔值{get;set;}
}
公共类项目
{
公共int-PId{get;set;}
公共Guid PIdG{get;set;}
公共字符串PName{get;set;}
public DateTime PDateCreated{get;set;}
公共布尔PDeleted{get;set;}
公共int PUId{get;set;}
公共int PTtId{get;set;}
公共字符串PCountry{get;set;}
公共字符串PCountryCode{get;set;}
公共字符串PParentalGuidence{get;set;}
公共字符串PConnectionType{get;set;}
}
公共类页面布局
{
公共整数PLId{get;set;}
公共Guid PlPId{get;set;}
公共字符串PLName{get;set;}
}
公共级CTX
{
公共列表项目{get;set;}
公共列表PlPageLayout{get;set;}
公共列表PlProjectLike{get;set;}
公共列表PrProjectRating{get;set;}
公共列表PcProjectConnect{get;set;}
公共CTX()
{
p项目=新列表();
PlPageLayout=新列表();
PlProjectLike=新列表();
PrProjectRating=新列表();
PcProjectConnect=新列表();
}
}
公共类,如组
{
公共int sumR{get;set;}
公共Guid pidG{get;set;}
}
公共课程
{
公共静态void Main(字符串[]args)
{
CTX CTX=新CTX();
字符串r=“r”;
字符串cC=“us”;
//为国家/地区和评级选择项目
List p=ctx.PProject.Where(x=>x.pccountrycode==cC&&x.PParentalGuidence==r).ToList();
//PlPId位于所选项目列表中的PlPageLayouts列表
List pppp=ctx.PlPageLayout.Where(x=>p.Select(n=>n.PIdG).Contains(x.PlPId)).ToList();
//PlProjectLike的计数/PlPIdG列表,其中PlValue是按计数降序排列的“Like”
列出plike=ctx.PlProjectLike.Where(x=>x.PlValue==“Like”).Select(c=>c.GroupBy(g=>new{g.PlPIdG},(key,group)=>new LikeGroup(){sumR=group.Count(),pidG=key.PlPIdG}).OrderByDescending(dat=>dat.sumR.ToList();
//PrProjectRating中的总和(PrValue)/PlPIdG列表,其中PrIsDeleted按总和(PrValue)降序排列为false
List prating=ctx.PrProjectRating.Where(x=>x.PrIsDeleted==false).选择(k=>k).GroupBy(g=>new{g.PrPIdG},(key,group)=>new LikeGroup(){sumR=group.Sum(k=>k.PrValue),pidG=key.PrPIdG}).OrderByDescending(dat=>dat.sumR).ToList();
//PcProjectConnect的计数/PlPIdG列表,其中PcStatus已连接,按计数降序排列
列出pconnect=ctx.PcProjectConnect.Where(x=>x.PcStatus==“Connected”).选择(c=>c).GroupBy(g=>new{g.PcPIdG},(key,group)=>new LikeGroup(){sumR=group.Count(),pidG=key.PcPIdG}).OrderByDescending(dat=>dat.sumR.ToList();
列表OrderedProjectLikeList=
(来自ctx.PlProjectLike中的pl)
在pl.PlPIdG上的plike中加入ord等于ord.pidG
orderby ord.sumR降序
选择pl.ToList();
列表顺序PRProjectRatingList=
(来自ctx.PrProjectRating中的pr)
在pr.PrPIdG等于ord.pidG时加入ord
orderby ord.sumR降序
选择pr).ToList();
列表顺序PCProjectConnectList=
(从ctx.PcProjectConnect中的pc)
加入ord在pc上的prating.PcPIdG等于ord.pidG
orderby ord.sumR降序
选择pc.ToList();
}
}
我做了一些测试
                pppp = pppp.OrderBy(c => p0.Contains(c.PlPId) ? p0.IndexOf(c.PlPId) : int.MaxValue).ToList();
                List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
                pppp = pppp.OrderBy(c => p0.Contains(c.PlPId) ? p0.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0p.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0pp.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
                List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
                pppp = pppp.OrderBy(c => p0.Contains(c.PlPId) ? p0.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0p.Contains(c.PlPId) ? p0p.IndexOf(c.PlPId) : int.MaxValue).ToList();
                pppp = pppp.OrderBy(c => p0pp.Contains(c.PlPId) ? **p0pp**.IndexOf(c.PlPId) : int.MaxValue).ToList();
public class PlProjectLike
{
    public int PlId { get; set; }
    public Guid PlPIdG { get; set; }
    public int PlUId { get; set; }
    public string PlValue { get; set; }
    public DateTime PlCreatedDate { get; set; }
}

public class PcProjectConnect
{
    public int PcId { get; set; }
    public Guid PcPIdG { get; set; }
    public int PcUId { get; set; }
    public DateTime PcCreatedDate { get; set; }
    public string PcStatus{ get; set; }
}

public class PrProjectRating
{
    public int PrId { get; set; }
    public int PrUId { get; set; }
    public string PrText { get; set; }
    public int PrValue { get; set; }
    public Guid PrPIdG { get; set; }
    public DateTime PrCreatedDate { get; set; }
    public bool PrIsDeleted{ get; set; }
}

public class PProject
{
    public int PId { get; set; }
    public Guid PIdG { get; set; }
    public string PName { get; set; }
    public DateTime PDateCreated { get; set; }
    public bool PDeleted { get; set; }
    public int PUId { get; set; }
    public int PTtId { get; set; }
    public string PCountry { get; set; }
    public string PCountryCode { get; set; }
    public string PParentalGuidence { get; set; }
    public string PConnectionType { get; set; }
}

public class PlPageLayout
{
    public int PLId { get; set; }
    public Guid PlPId { get; set; }
    public string PLName { get; set; }
}

public class CTX
{
    public List<PProject> PProject { get; set; }
    public List<PlPageLayout> PlPageLayout { get; set; }
    public List<PlProjectLike> PlProjectLike { get; set; }
    public List<PrProjectRating> PrProjectRating { get; set; }
    public List<PcProjectConnect> PcProjectConnect { get; set; }

    public CTX()
    {
        PProject = new List<PProject>();
        PlPageLayout = new List<PlPageLayout>();
        PlProjectLike = new List<PlProjectLike>();
        PrProjectRating = new List<PrProjectRating>();
        PcProjectConnect = new List<PcProjectConnect>();
    }
}

public class LikeGroup
{
    public int sumR { get; set; }
    public Guid pidG { get; set; }
}
public class Program
{
    public static void Main(string[] args)
    {
        CTX ctx = new CTX();
        String r = "R";
        string cC = "us";

        // Select project for country and rating
        List<PProject> p = ctx.PProject.Where(x => x.PCountryCode == cC && x.PParentalGuidence == r).ToList();
        // List of PlPageLayouts where the PlPId is in the selected PProject list
        List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
        // List of Count/PlPIdG from PlProjectLike where the PlValue is 'Like' Ordered by the count descending
        List<LikeGroup> plike = ctx.PlProjectLike.Where(x => x.PlValue == "Like").Select(c => c).GroupBy(g => new { g.PlPIdG }, (key, group) => new LikeGroup() { sumR = group.Count(), pidG = key.PlPIdG }).OrderByDescending(dat => dat.sumR).ToList();
        // List of Sum(PrValue)/PlPIdG from PrProjectRating where PrIsDeleted is false Ordered by the Sum(PrValue) descending
        List<LikeGroup> prating = ctx.PrProjectRating.Where(x => x.PrIsDeleted == false).Select(k => k).GroupBy(g => new { g.PrPIdG }, (key, group) => new LikeGroup(){ sumR = group.Sum(k => k.PrValue), pidG = key.PrPIdG }).OrderByDescending(dat => dat.sumR).ToList();
        // List of Count/PlPIdG from PcProjectConnect where PcStatus is Connected Ordered by the count descending
        List<LikeGroup> pconnect = ctx.PcProjectConnect.Where(x => x.PcStatus == "Connected").Select(c => c).GroupBy(g => new { g.PcPIdG }, (key, group) => new LikeGroup() { sumR = group.Count(), pidG = key.PcPIdG }).OrderByDescending(dat => dat.sumR).ToList();

        List<PlProjectLike> OrderedProjectLikeList = 
            (from pl in ctx.PlProjectLike 
             join ord in plike on pl.PlPIdG equals ord.pidG 
             orderby ord.sumR descending 
             select pl).ToList();

        List<PrProjectRating> OrderedPrProjectRatingList = 
            (from pr in ctx.PrProjectRating
             join ord in prating on pr.PrPIdG equals ord.pidG
             orderby ord.sumR descending
             select pr).ToList();

        List<PcProjectConnect> OrderedPcProjectConnectList =
            (from pc in ctx.PcProjectConnect
             join ord in prating on pc.PcPIdG equals ord.pidG
             orderby ord.sumR descending
             select pc).ToList();

    }
}
https://stackoverflow.com/questions/65014531/summing-a-value-inside-of-a-anonymous-type
                  var ratings =
                from r1 in ctx.PrProjectRating
                where r1.PrIsDeleted == false
                group r1.PrValue by r1.PrPIdG into g
                select new
                {
                Id = g.Key,
                Sum = g.Sum(),
                };
                var likes =
                    from l in ctx.PlProjectLike
                    where l.PlValue == "Like"
                    group 1 by l.PlPIdG into g
                    select new
                    {
                        Id = g.Key,
                        Count = g.Count(),
                    };
                var connects =
                    from c1 in ctx.PcProjectConnect
                    where c1.PcStatus == "Connected"
                    group 1 by c1.PcPIdG into g
                    select new
                    {
                        Id = g.Key,
                        Count = g.Count(),
                    };

                var ids = ratings.Select(r => r.Id)
                    .Union(likes.Select(l => l.Id))
                    .Union(connects.Select(c => c.Id))
                    .ToHashSet();
                var query =
                    from i in ids
                    join ra in ratings on i equals ra.Id into rs
                    from ra in rs.DefaultIfEmpty()
                    join l in likes on i equals l.Id into ls
                    from l in ls.DefaultIfEmpty()
                    join co in connects on i equals co.Id into cs
                    from co in cs.DefaultIfEmpty()
                    select new
                    {
                        Id = i,
                        Ratings = ra?.Sum ?? 0,
                        Likes = l?.Count ?? 0,
                        Connects = co?.Count ?? 0,
                    };
                List<PlPageLayout> pppp = ctx.PlPageLayout.Where(x => p.Select(n => n.PIdG).Contains(x.PlPId)).ToList();
                pppp = query.OrderByDescending(x => x.Ratings + x.Likes + x.Connects).SelectMany(j => pppp.Where(s => s.PlPId == j.Id)).ToList();