I have the below data.
var gradeData = (from data in oAngieCtxt.prc_ShopInstanceCustomersData(Convert.ToInt32(this.ShopInstanceID), 10000, false)
.Where(row => row.RecievedPoints != "n/a")
.GroupBy(row => new { row.Name })
.Select(g => new
{
TotalPoints = g.Sum(x => Convert.ToDouble(x.RecievedPoints) * (x.Weightage.ToString() == "0.00" ? 1 : Convert.ToDouble(x.Weightage))),
Name = g.Key.Name
})
select data).ToList();
I am assigning this to DataGrid as follows:
this.grdAllDealers.DataSource = gradeData;
this.grdAllDealers.DataBind();
This will result in screen as
5 A
10 B
15 C
.
.
.
.
However I want this data to printed on screen as
5 - A
10 - B
15 - C
.
.
.
.
hyphen should come in between TotalPoints and Name.
Can somebody advise how to get this in linq query?
Note: I know to get using foreach, but I want to do it without foreach.
Thanks in advance...
I fixed it and it is that simple... may will help future users like me ;)
this.grdAllDealers.DataSource = gradeData.Select(O=> O.TotalPoints + " - " + O.Name );
Related
i want to handle dynamic query string in Arangodb
let condition = 'FILTER u.username == '+value
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == '+value
}
const query = aql`
FOR u in users
${condition}
RETURN u
`
if I do like this, I'm getting error like
ArangoError: AQL: syntax error, unexpected bind parameter near '#value0
we can pass aql query into another aql query
let condition = aql`FILTER u.username == ${value}`
if(usingPhoneNumber){
condition = aql`FILTER u.phoneNumber == ${value}`
}
const query = aql`
FOR u in users
${condition}
RETURN u
`
this fixes my issue. thank guys for your answers
I guess your username and phone number are strings, so they must be between quotes.
let condition = 'FILTER u.username == "' + value + '"'
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == "' + value '"'
}
const query = aql`
FOR u in users
${condition}
RETURN u
`
Could you try something like
let condition = 'FILTER u.username == ${value}'
if(usingPhoneNumber){
condition = 'FILTER u.phoneNumber == ${value}'
}
Assuming the value is getting something assigned, I feel this might work. Do let me know the error that comes up, in case it comes up.
I suggest you try adding the condition in the query.
FOR u in users
FILTER u.username ==${value0} OR u.phoneNumber == ${value0}
RETURN u
If this works for you, I supose the problem is the aql formater assumes all inserted values with ${} are bind parameters, wich will be iterated over and not a constant query declaration.
Your current script resolves to:
{
"query" : "FOR u IN users #value0 RETURN c._key",
"bindVars" : {
"value0" : "'FILTER u.username == '+value"
}
My Query is:
SELECT SUM(hrs) from Work WHERE EmployeeNumber =? AND EmployeeName=? AND WorkDate BETWEEN ? AND ?
My KEY for couch DB
when I pass the other two strings like employee number and name I am getting data but when am adding date also I get empty array, but I see there is data for these dates.
I have tried sending dates as strings also but no result.
?startkey=["91444","Rick",[2018,2,4]]&endkey = ["91444","Rick",[2018,2,15]]
As posted in your comment, your view functions look like this:
map: "function (doc) {
if (doc.EmployeeNumber && doc.EmployeeName && doc.workDate) {
var date = doc.workDate.split('-');
var year = date[0];
var mon = date[1]; if(mon.charAt( 0 ) == '0') { mon = mon.slice( 1 ); }
var day = date[2]; if(day.charAt( 0 ) == '0') { day = day.slice( 1 ); }
emit(doc.EmployeeNumber,doc.EmployeeName,[Number(year), Number(mon), Number(day)], doc.hrs);
}
}",
reduce: "_sum"
In your map function you are emitting 4 things:
emit(
doc.EmployeeNumber,
doc.EmployeeName,
[Number(year), Number(mon), Number(day)],
doc.hrs
);
As mentioned in this documentation
The emit() function always takes two arguments: the first is key, and the second is value.
Therefore your map function doesn't look right.
I have a query to get photos according to values in a pivot table, that stores the relation of "pics" and "tags":
#photos
$q = PicTag::select(DB::raw('distinct(pics.id)'),
'pics.url',
'pics.titel',
'pics.hits',
'pics.created_at',
'users.username',
'users.displayname')
->leftJoin('pics', 'pics.id', '=', 'pic_tag.pic_id')
->leftJoin('users','users.id','=','pics.user_id')
->whereIn('pic_tag.tag_id', $tagids);
if($cat)
$q->where('typ',$cat);
if($year)
$q->where('jahrprod',$year);
$pics = $q->orderBy('pics.id','desc')
->paginate(30);
The problem is, when for a certain photo multiple (same) tags are stored like "Tag", "tag" and "tAG". Then the same photo would be shown 3 times in my gallery. That is why I use the distinct in the query.
Then the gallery is ok, but $pics->total() does not show "87 photos" but for example "90 photos", because the distinct is not used in the pagination. In laravel 4, I used groupBy('pics.id'), but this did not seem to be the fastest query and with laravel 5 it gives me a total() count result of 1.
How could I get the right total() value?
I know it's an old subject but it could help some other people.
I faced the same problem and the only good solution (low memory cost) I found was to do the request in two times:
$ids = DB::table('foo')
->selectRaw('foo.id')
->distinct()
->pluck('foo.id');
$results = $query = DB::table('foo')
->selectRaw('foo.id')
->whereIn('foo.id', $ids)
->paginate();
I tried this with 100k results, and had no problem at all.
Laravel has issue in paginate of complex queries. so you should handle them manually . In laravel 5 I did it in 2 steps :
Step 1: repository method :
public function getByPage($page = 1, $limit = 10 , $provinceId , $cityId , $expertiseId)
{
$array = ['users.deleted' => false];
$array["users.approved"] = true;
$array["users.is_confirmed"] = true;
if($provinceId)
$array["users.province_FK"] = $provinceId;
if($cityId)
$array["users.city_FK"] = $cityId;
if($expertiseId)
$array["ONJNCT_USERS_EXPERTISE.expertise_FK"] = $expertiseId;
$results = new \stdClass();
$results->page = $page;
$results->limit = $limit;
$results->totalItems = 0;
$results->items = array();
$users= DB::table('users')
->distinct()
->select('users.*','ONDEGREES.name as drgree_name')
->join('ONJNCT_USERS_EXPERTISE', 'users.id', '=', 'ONJNCT_USERS_EXPERTISE.user_FK')
->join('ONDEGREES', 'users.degree_FK', '=', 'ONDEGREES.id')
->where($array)
->skip($limit * ($page - 1))->take($limit)->get();
//$users = $usersQuery>skip($limit * ($page - 1))->take($limit)->get();
$usersCount= DB::table('users')
->select('users.*','ONDEGREES.name as drgree_name')
->join('ONJNCT_USERS_EXPERTISE', 'users.id', '=', 'ONJNCT_USERS_EXPERTISE.user_FK')
->join('ONDEGREES', 'users.degree_FK', '=', 'ONDEGREES.id')
->where($array)
->count(DB::raw('DISTINCT users.id'));
$results->totalItems = $usersCount;
$results->items = $users;
return $results;
}
Step 2:
In my Search Controller :
function search($provinceId , $cityId , $expertiseId){
$page = Input::get('page', 1);
$data = $this->userService->getByPage($page, 1 , $provinceId ,$cityId , $expertiseId);
$users = new LengthAwarePaginator($data->items, $data->totalItems, 1 , Paginator::resolveCurrentPage(),['path' => Paginator::resolveCurrentPath()]);
return View::make('guest.search.searchResult')->with('users' ,$users);
}
It worked for me well!
I have two tables:
NewsRooms ( NrID[int] , NrName [string]);
RawNews( RnID [int], NrID[string]);
realtion is RawNews 1 * NewsRooms
so i use checkboxes for NewsRooms and save the ids as a string in RawNews like this ';1;2;'
now for example i have a list which contains some NrIDs . i want to select every RawNew which it's NrID contains any of the ids inside that list.
here is my code:
var temp = Util.GetAvailibleNewsRooms("ViewRawNews");
List<string> ids = new List<string>();
foreach (var item in temp)
ids.Add(";" + item.NrID.ToString() + ";");
model = db.RawNews.Where(r => r.NrID.Any(ids));
the line model = db.RawNews.Where(r => r.NrID.Any(ids)); is wrong and i don't know how to write this code. please guide me. thanks
ok guys, i found the solution myself so i post it here maybe some other guy need it some day!!
model = model.Where(r => ids.Any(i => r.NrID.Contains(i)));
I have products that have attributes for 'color' & 'strength'. I'm trying to get those options listed under those attributes as fields for views, so that I can use them as filters. So for example sort by color & strength.
I've looked all around on google and can only find modules for Drupal 6. Anyone know of anything for 7?
Like said in the previous post I had 2 attributes 'color' & 'strength' which I needed to match for exact product matches but ubercart didn't have anything for that, so I wrote them into URL for get statements as variables 1 & 2, so for example a URL which had both attributes selected would look like:
www.website.com/node/68?1=96&2=7
Sometimes one variable would be set but not the other, so I had to make up for that also by using a % wildcard. Here's the code for that part
// Since PHP's serialize function sometimes serializes in the incorrect order,
// here we manually build the comparison key
// Additionally append the image links urls with provided strength/color data
if( isset( $_REQUEST['1'] ) ) {
$_1 = $_REQUEST['1'];
if( $_1 !== '%' ) $url[] = "1=$_1";
} else $_1 = '%';
if( isset( $_REQUEST['2'] ) ) {
$_2 = $_REQUEST['2'];
if( $_2 !== '%' ) $url[] = "2=$_2";
} else $_2 = '%';
$combination = "a:2:{i:1;s:";
$combination .= $_1 == '%' ? '%:"%";' : strlen($_1) . ':"' . $_1 . '";';
$combination .= "i:2;s:";
$combination .= $_2 == '%' ? '%:"%";' : strlen($_2) . ':"' . $_2 . '";';
$combination .= '}';
// if some products don't have a second attribute at all
$combination2 = "a:1:{i:1;s:";
$combination2 .= $_1 == '%' ? '%:"%"' : strlen($_1) . ':"' . $_1 . '";';
$combination2 .= ';}';
Underneath that I had to do some extra queries like if a taxonomy was set and check if some dynamic properties were set, thats why the WHERE is stored in a variable. Frankly they'll just confuse anyone so I left them out. But for your sake the next part you just need to query it.
$where = "WHERE (pa.combination LIKE :pattern1 OR pa.combination LIKE :pattern2) AND s.stock IS NOT NULL";
$comparison = array( ':pattern1' => $combination,
':pattern2' => $combination2 );
$filtered = db_query(
"
SELECT pa.nid, pa.model, pa.combination, n.title, p.sell_price, f.uri
FROM {uc_product_adjustments} pa
LEFT JOIN {node} n ON pa.nid = n.nid
LEFT JOIN {uc_products} p ON pa.nid = p.nid
LEFT JOIN {field_data_uc_product_image} i ON i.entity_type = 'node' AND i.entity_id = n.nid
LEFT JOIN {file_managed} f ON f.fid = i.uc_product_image_fid
LEFT JOIN {uc_product_stock} s ON pa.model = s.sku AND s.stock <> '0'
$where
",
$comparison
);
Lastly loop over the results and store them in a normal array
foreach( $filtered as $i => $record ) {
if( is_int( array_search( $record->nid, $nids ) ) ) continue;
else {
$nids[] = $record->nid;
$result[] = $record;
}
}
This code checks for any products that match any of the attribute values that are currently in stock
You may have a look at these sandbox projects : UC Views Attributes Work and UC attribute views.
I'm looking for a similar feature, as it seems not possible to get UC attributes into a view. I cannot test myself right now as I have a deadline this weekend for a project, but I'd be happy to have your feedback.