C# 复杂Linq c查询
我在林帕德试过这个 我有以下数据和linq查询,它应该只返回1条记录和2个图像,但返回2条记录和4个图像 我知道我有点不对劲,但不知道是什么。我正在寻找用户详细信息+汽车详细信息+用户的图像:0b3c2ba5-1538-4557-a6c0-7de701fd83e7 这与出价有关,因为当我删除用户0b3c2ba5-1538-4557-a6c0-7de701fd83e7的一个出价时,我会得到1条记录和2张图像 桌子 --- 投标表格 表用户详细信息 餐车 表2:U图像 质疑 --- 我正在寻找用户详细信息+汽车详细信息+用户图片: 0b3c2ba5-1538-4557-a6c0-7de701fd83e7 根据您在那一行中所说的判断,您可以通过将查询拆分为3个单独的查询并对汽车ID使用不同的函数来实现目标 行动方针如下: 从当前用户的bid表中查找所有不同的车辆ID 查找与步骤1中的数据对应的所有图像和用户/车辆详细信息 代码如下所示: var carIDs=投标。其中x=>x.usedid==new Guid0b3c2ba5-1538-4557-a6c0-7de701fd83e7。选择x=>x.cardid.DistinctC# 复杂Linq c查询,c#,linq,C#,Linq,我在林帕德试过这个 我有以下数据和linq查询,它应该只返回1条记录和2个图像,但返回2条记录和4个图像 我知道我有点不对劲,但不知道是什么。我正在寻找用户详细信息+汽车详细信息+用户的图像:0b3c2ba5-1538-4557-a6c0-7de701fd83e7 这与出价有关,因为当我删除用户0b3c2ba5-1538-4557-a6c0-7de701fd83e7的一个出价时,我会得到1条记录和2张图像 桌子 --- 投标表格 表用户详细信息 餐车 表2:U图像 质疑 --- 我正在寻找用户详
然后,您可以在两个单独的查询中选择用户详细信息和图像。这是一个非常大的家庭作业。给你 使用此查询
var query = from bd in lstbids
group bd by new { carid = bd.carid, userid = bd.userid } into gbd
join ud in lstuserdetails on gbd.First().userid equals ud.userid
join c in lstcars on gbd.First().carid equals c.id
where c.enabled && ud.userid == new Guid("0b3c2ba5-1538-4557-a6c0-7de701fd83e7")
select new
{
images = lstaction_images.Where(ai => ai.belongs_to == c.id),
bidamount = lstbids.Where(b => b.carid == c.id).OrderByDescending(b => b.id).Select(b => b.bidamount).DefaultIfEmpty(0).FirstOrDefault(),
ud.city,
ud.state,
c.name,
c.descr,
c.id,
c.listingOption,
c.priceStarting,
c.priceReserve,
gbd.FirstOrDefault().userid
};
注意:这个查询可以用更好的方式编写
以下是我认为您的表格是我的列表的示例表格:
表格/班级
数据/记录
…你也没有投任何票。。。曾经。@spender他必须先有15个以上的代表。。。我同意他必须在他之前的问题中选择一些答案。@user389391:因为你在cars表上有两个元素,所以你要做两次select new{…}。@steve,是的,对此我深表歉意,但我确实记得,我收到的几乎所有建议都是错误的或没有帮助的:-也许我应该对此发表评论,但我的时间太忙了,以至于我经常继续下去,并找到另一种方法。我的目标是纠正我的标记:-@Tom我不确定我是否会这样做,因为我的目的是只找到一个用户的出价,并返回详细信息和最后一个用户的出价bid@user389391尝试此查询。。它适合你。请让我知道。再次感谢您为解决此问题所做的非常有趣的尝试,但是。。。结果返回用户0b3c2ba5-1538-4557-a6c0-7de701fd83e7的两个unqiue出价,当他们应该只有一个唯一的出价时,如数据所示。确定放弃我的上述评论,因为进一步的测试显示,你可能已经放弃了它,除非它得到一个错误:不支持的重载用于查询运算符“DefaultIfEmpty”。如果我把它拿出来,它似乎会起作用。进一步测试并将更新youThanks如果Prasads解决方案不起作用,我将尝试您的方法,因为我碰巧看到了他的解决方案,并首先尝试它,因为它位于顶部,并且更符合我希望的多功能一体查询:-
userid city state
0b3c2ba5-1538-4557-a6c0-7de701fd83e7 Sydney NSW
id name descr listingOption priceStarting priceReserve
83 Valiant Old Car 2 1000 1500
86 Volvo Safe Car 3 3000 4500
id image belongs_to
71 images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/alpaca.JPG 83
72 images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/a_bag.jpg 83
75 images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/alpaca.JPG 86
76 images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/a_bag.jpg 86
var query = (from c in cars
from ud in users_details
from bd in bids
orderby c.listingOption descending
where a.userID == ud.userid
&& c.id == bd.carID
&& c.enabled == true
&& bd.userID == new Guid("0b3c2ba5-1538-4557-a6c0-7de701fd83e7")
let images = from ai in auction_images
where ai.belongs_to == c.id
select ai
let bid = (from b in bids
orderby b.id descending
where b.carID == c.id
select b.bidamount).FirstOrDefault()
select
new
{
images,
bidamount = (bid != null ? bid : 0),
ud.city,
ud.state,
c.name,
c.descr,
c.id,
c.listingOption,
c.priceStarting,
c.priceReserve,
bd.userID
}
);
query.Distinct().Dump();
var query = from bd in lstbids
group bd by new { carid = bd.carid, userid = bd.userid } into gbd
join ud in lstuserdetails on gbd.First().userid equals ud.userid
join c in lstcars on gbd.First().carid equals c.id
where c.enabled && ud.userid == new Guid("0b3c2ba5-1538-4557-a6c0-7de701fd83e7")
select new
{
images = lstaction_images.Where(ai => ai.belongs_to == c.id),
bidamount = lstbids.Where(b => b.carid == c.id).OrderByDescending(b => b.id).Select(b => b.bidamount).DefaultIfEmpty(0).FirstOrDefault(),
ud.city,
ud.state,
c.name,
c.descr,
c.id,
c.listingOption,
c.priceStarting,
c.priceReserve,
gbd.FirstOrDefault().userid
};
public class userdetails
{
public Guid userid { get; set; }
public string city { get; set; }
public string state { get; set; }
}
public class bids
{
public int id { get; set; }
public int carid { get; set; }
public int bidamount { get; set; }
public DateTime dateplaced { get; set; }
public Guid userid { get; set; }
}
public class cars
{
public int id { get; set; }
public string name { get; set; }
public string descr { get; set; }
public int listingOption { get; set; }
public int priceStarting { get; set; }
public int priceReserve { get; set; }
public bool enabled { get; set; }
}
public class action_images
{
public int id { get; set; }
public string image { get; set; }
public int belongs_to { get; set; }
}
List<bids> lstbids = new List<bids>
{
new bids {id= 43, carid=83, bidamount=625, dateplaced=Convert.ToDateTime("2012-11-05 16:12:51.600"), userid=new Guid("a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc") },
new bids {id= 44, carid=86, bidamount=575, dateplaced=Convert.ToDateTime("2012-11-05 16:15:02.257"), userid=new Guid("a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc") },
new bids {id= 45, carid=83, bidamount=650, dateplaced=Convert.ToDateTime("2012-11-05 16:15:07.283"), userid=new Guid("a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc") },
new bids {id= 46, carid=86, bidamount=600, dateplaced=Convert.ToDateTime("2012-11-05 17:45:04.140"), userid=new Guid("a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc") },
new bids {id= 47, carid=86, bidamount=625, dateplaced=Convert.ToDateTime("2012-11-05 17:45:08.867"), userid=new Guid("a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc") },
new bids {id= 49, carid=83, bidamount=750, dateplaced=Convert.ToDateTime("2012-11-07 13:40:37.590"), userid=new Guid("0b3c2ba5-1538-4557-a6c0-7de701fd83e7") },
new bids {id= 52, carid=83, bidamount=850, dateplaced=Convert.ToDateTime("2012-11-08 13:40:37.590"), userid=new Guid("0b3c2ba5-1538-4557-a6c0-7de701fd83e7") },
};
List<userdetails> lstuserdetails = new List<userdetails>
{
new userdetails { userid = new Guid ("0b3c2ba5-1538-4557-a6c0-7de701fd83e7"), city = "Sydney", state = "NSW"},
};
List<cars> lstcars = new List<cars>
{
new cars {id = 83, name = "Valiant", descr = "Old Car", listingOption = 2, priceStarting = 1000, priceReserve = 1500, enabled = true },
new cars {id = 86, name = "Volvo", descr = "Safe Car", listingOption = 3, priceStarting = 3000, priceReserve = 4500, enabled = true },
};
List<action_images> lstaction_images = new List<action_images>
{
new action_images { id = 71 , image = "images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/alpaca.JPG", belongs_to =83 },
new action_images { id = 72 , image = "images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/a_bag.jpg", belongs_to =83 },
new action_images { id = 75 , image = "images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/alpaca.JPG", belongs_to =86 },
new action_images { id = 76 , image = "images/a5d383e0-0c2c-44cf-9da1-0ce364b1dbdc/a_bag.jpg", belongs_to =86 },
};